En programación informática , un grupo de subprocesos es un patrón de diseño de software para lograr la concurrencia de ejecución en un programa informático. A menudo también llamado trabajadores replicados o modelo de equipo de trabajadores , [1] un grupo de subprocesos mantiene múltiples subprocesos esperando que se asignen tareas para su ejecución simultánea por parte del programa supervisor. Al mantener un grupo de subprocesos, el modelo aumenta el rendimiento y evita la latencia en la ejecución debido a la creación y destrucción frecuente de subprocesos para tareas de corta duración. [2] La cantidad de subprocesos disponibles se ajusta a los recursos informáticos disponibles para el programa, como una cola de tareas paralelas después de completar la ejecución.
El tamaño de un grupo de subprocesos es la cantidad de subprocesos que se mantienen en reserva para ejecutar tareas. Por lo general, es un parámetro ajustable de la aplicación para optimizar el rendimiento del programa. [3] Decidir el tamaño óptimo del grupo de subprocesos es crucial para optimizar el rendimiento.
Una ventaja de un grupo de subprocesos en comparación con la creación de un nuevo subproceso para cada tarea es que la sobrecarga de creación y destrucción de subprocesos se limita a la creación inicial del grupo, lo que puede dar como resultado un mejor rendimiento y una mejor estabilidad del sistema. La creación y destrucción de un subproceso y sus recursos asociados puede ser un proceso costoso en términos de tiempo. Sin embargo, una cantidad excesiva de subprocesos en reserva desperdicia memoria y el cambio de contexto entre los subprocesos ejecutables genera penalizaciones de rendimiento. Una conexión de socket a otro host de red, que puede requerir muchos ciclos de CPU para desconectarse y restablecerse, se puede mantener de manera más eficiente al asociarla con un subproceso que viva durante el curso de más de una transacción de red.
El uso de un grupo de subprocesos puede resultar útil incluso si se deja de lado el tiempo de inicio de los subprocesos. Existen implementaciones de grupos de subprocesos que hacen que sea trivial poner en cola el trabajo, controlar la concurrencia y sincronizar los subprocesos a un nivel superior al que se puede hacer fácilmente al gestionar los subprocesos manualmente. [4] [5] En estos casos, los beneficios de rendimiento que se obtienen con su uso pueden ser secundarios.
Por lo general, un grupo de subprocesos se ejecuta en una sola computadora. Sin embargo, los grupos de subprocesos están conceptualmente relacionados con granjas de servidores en las que un proceso maestro, que podría ser un grupo de subprocesos en sí mismo, distribuye tareas a procesos de trabajo en diferentes computadoras, con el fin de aumentar el rendimiento general. Los problemas vergonzosamente paralelos son muy susceptibles a este enfoque. [ cita requerida ]
La cantidad de subprocesos se puede ajustar dinámicamente durante la vida útil de una aplicación en función de la cantidad de tareas en espera. Por ejemplo, un servidor web puede agregar subprocesos si llegan numerosas solicitudes de páginas web y puede eliminar subprocesos cuando esas solicitudes disminuyen. [ disputado – debatido ] El costo de tener un grupo de subprocesos más grande es un mayor uso de recursos. El algoritmo utilizado para determinar cuándo crear o destruir subprocesos afecta el rendimiento general: