Grupo de subprocesos

Patrón de diseño de software
Un grupo de subprocesos de muestra (cuadros verdes) con tareas en espera (azules) y tareas completadas (amarillas)

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.

Actuació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. [ disputadodebatido ] 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:

  • Crear demasiados subprocesos desperdicia recursos y cuesta tiempo crear subprocesos no utilizados.
  • Destruir demasiados hilos requiere más tiempo posteriormente, cuando se crean nuevamente.
  • Crear subprocesos demasiado lentamente puede provocar un rendimiento deficiente del cliente (tiempos de espera prolongados).
  • Destruir subprocesos demasiado lentamente puede privar a otros procesos de recursos.

Véase también

Referencias

  1. ^ Garg, Rajat P. y Sharapov, Ilya Técnicas para optimizar aplicaciones - Computación de alto rendimiento Prentice-Hall 2002, pág. 394
  2. ^ Holub, Allen (2000). Cómo domesticar subprocesos en Java . Apress. pág. 209.
  3. ^ Yibei Ling; Tracy Mullen; Xiaola Lin (abril de 2000). "Análisis del tamaño óptimo del grupo de subprocesos". ACM SIGOPS Operating Systems Review . 34 (2): 42–55. doi :10.1145/346152.346320. S2CID  14048829.
  4. ^ "Clase QThreadPool | Qt Core 5.13.1".
  5. ^ "GitHub - vit-vit/CTPL: Biblioteca de subprocesos C++ moderna y eficiente". GitHub . 2019-09-24.
  • "Consulta por sectores, ejecución paralela y unión: un patrón de grupo de subprocesos en Java" por Binildas CA
  • "Grupos de subprocesos y colas de trabajo" por Brian Goetz
  • "Un método de agrupación de subprocesos de trabajo" por Pradeep Kumar Sahu
  • "Cola de trabajo" de Uri Twig: demostración en código C++ de subprocesos agrupados que ejecutan una cola de trabajo.
  • "Agrupamiento de subprocesos y encadenamiento de ejecución de Windows"
  • "Grupo de subprocesos inteligente" de Ami Bar
  • "Programación del Thread Pool en .NET Framework" por David Carmona
  • "Creación de un grupo de subprocesos de bloqueo de notificaciones en Java" por Amir Kirsh
  • "Programación práctica con subprocesos en Python: grupos de subprocesos y colas" por Noah Gift
  • "Optimización de estrategias de grupos de subprocesos para CORBA en tiempo real" por Irfan Pyarali, Marina Spivak, Douglas C. Schmidt y Ron Cytron
  • “La cancelación diferida. Un patrón de comportamiento” de Philipp Bachmann
  • "Un grupo de subprocesos de C++17 para computación científica de alto rendimiento" por Barak Shoshany
Obtenido de "https://es.wikipedia.org/w/index.php?title=Grupo_de_subprocesos&oldid=1138829275"