Estoy en medio de un problema en el que no puedo decidir qué solución tomar.Grupo de subprocesos frente a muchos subprocesos individuales
El problema es un poco único. Digámoslo de esta manera, recibo datos de la red continuamente (de 2 a 4 veces por segundo). Ahora cada dato pertenece a un grupo diferente, digamos. Ahora, llamemos a estos grupos, grupo1, grupo2, etc.
Cada grupo tiene una cola de trabajos dedicada donde los datos de la red se filtran y se agregan a su grupo correspondiente para su procesamiento.
Al principio creé un hilo dedicado por grupo que tomaría los datos de la cola de trabajos, los procesaría y luego pasaría al estado de bloqueo (utilizando la Cola de bloqueo vinculada).
Pero mi superior me sugirió que debería usar grupos de subprocesos porque de esta manera los subprocesos no se bloquearán y otros grupos los podrán usar para procesarlos.
Pero aquí está la cosa, la obtención de datos es lo suficientemente rápida y el tiempo que tarda un hilo en procesarla es suficiente para que el hilo, posiblemente, no entre en modo de bloqueo. Y esto también garantizará que los datos se procesen de forma secuencial (el trabajo 1 se realiza antes del trabajo 2), lo que al juntar, escasas posibilidades, podría no suceder.
Mi senior también está empeñado en el hecho de que la agrupación también nos ahorrará mucha memoria porque los hilos están agrupados (creo que realmente fue por la palabra;)). Si bien no estoy de acuerdo con esto porque, personalmente creo, agrupados o no, cada hilo obtiene su propia memoria de pila. A menos que haya algo en los grupos de hilos que no conozco.
Una última cosa, siempre pensé que la agrupación ayuda donde los trabajos aparecen en un gran número por poco tiempo. Esto tiene sentido porque el enhebrado de subprocesos sería una pérdida de rendimiento debido al tiempo necesario para iniciar un subproceso es mucho más que el tiempo dedicado a hacer el trabajo. Así que la puesta en común ayuda mucho aquí.
Pero en mi caso group1, group2, ..., groupN siempre permanecen con vida. Entonces, si hay datos o no, todavía estarán allí. Entonces, el engendro de hilos no es el problema aquí.
Mi superior no está convencido y quiere que vaya con la solución de agrupamiento porque su huella de memoria es excelente.
Entonces, ¿qué camino tomar?
Gracias.
En una situación como esta solo hay una respuesta. Hechos duros y fríos! Demuestre cuál es mejor con modelos/prototipos controlados apropiados. Es posible que ambos se sorprendan ya que cada uno puede ser válido en diferentes circunstancias. –
CYA memo required - detalle sus problemas/inquietudes en un correo electrónico, luego use la solución combinada, según lo recomendado por su superior. Si hay problemas con el diseño agrupado, está protegido :). En cuanto a su requisito, probablemente vaya con un hilo dedicado por grupo: los hilos solo se crean al inicio y un hilo es más fácil de depurar que un motor de estado de asincronización que debe emitirse continuamente al grupo cuando algo necesita hacerlo. Si no se utiliza un enfoque de asincronización con el grupo de subprocesos, cualquier llamada de bloqueo bloqueará un subproceso de grupo, lo que obligará al sistema a crear más subprocesos :( –
Si su aplicación crea un subproceso por grupo y cada subproceso toma datos de su propia cola y se ejecuta infinitamente, efectivamente tiene un grupo de subprocesos fijos.La creación de un grupo de subprocesos "real" con el mismo número de subprocesos no cambiaría mucho. Lo que podría ganar utilizando un grupo de subprocesos "real" es asignar solo un pequeño número de subprocesos subprocesos para recoger datos de todas las colas, y el grupo de subprocesos podría crecer y reducirse según sea necesario si hay demasiadas tareas esperando en la cola del grupo de subprocesos o si hay demasiados subprocesos inactivos. –