Estoy considerando el uso de potencialmente cientos de subprocesos para implementar tareas que administren dispositivos a través de una red.Impacto de cientos de subprocesos inactivos
Esta es una aplicación C++ que se ejecuta en un procesador powerpc con un kernel de Linux.
Después de una fase inicial cuando cada tarea realiza la sincronización para copiar datos del dispositivo en la tarea, la tarea queda inactiva, y solo se activa cuando recibe una alarma o necesita cambiar algunos datos (configuración), que es raro después de la fase de inicio. Una vez que todas las tareas lleguen a la fase "inactiva", espero que solo unas pocas por segundo deberán activarse.
Entonces, mi principal preocupación es que si tengo cientos de hilos, ¿tendrán un impacto negativo en el sistema una vez que estén inactivos?
Gracias. Amso
edición:
estoy actualizando la cuestión sobre la base de las respuestas que me dieron. Gracias chicos. Parece que tener una tonelada de hilos en ralentí (IO bloqueado, esperando, durmiendo, etc.), per se, no tendrá un impacto en el sistema en términos de capacidad de respuesta. Por supuesto, gastarán dinero extra para la pila de cada hilo y los datos de TLS, pero eso está bien siempre que arrojemos más memoria a la cosa (haciéndolo más €€€)
Pero entonces, otros problemas deben ser contabilizados para. Tener cientos de subprocesos esperando probablemente aumente el uso de memoria en el núcleo, debido a la necesidad de colas de espera u otros recursos similares. También hay un problema de latencia, que parece no determinista. Para verificar la capacidad de respuesta y el uso de memoria de cada solución, se debe medir y comparar.
Finalmente, la idea de cientos de subprocesos que estarán mayormente inactivos se puede modelar como un grupo de subprocesos. Esto reduce un poco la linealidad del código, pero aumenta drásticamente la escalabilidad de la solución y, con un cuidado apropiado, se puede ajustar fácilmente para ajustar el compromiso entre el rendimiento y el uso de los recursos.
Creo que eso es todo. Gracias a todos por su entrada.
-
Amso
Si necesita cientos de subprocesos, está viendo el problema de la manera incorrecta. –
Roger: Estoy en desacuerdo, cientos de hilos pueden estar bien, dependiendo del problema. Usar hilos significa que el código puede ser agradable y lineal, lo que hace que algunas tareas sean mucho más fáciles. – MarkR
No estoy de acuerdo con el desacuerdo. Si alguna vez miró la salida 'ps amx' en Linux, notará algunos programas (como ...' console-kit-daemon') que mantienen alrededor de 63 hilos daemon (de los cuales 57 son generalmente inútiles y no hacen nada). – user562374