stringtranslate.com

Grupo de hilos

Un grupo de subprocesos de muestra (cuadros verdes) con tareas en espera (azul) y tareas completadas (amarillo)

En programación de computadoras , un grupo de subprocesos es un patrón de diseño de software para lograr la concurrencia de ejecución en un programa de computadora. A menudo también llamado modelo de trabajadores replicados o de equipo de trabajadores , [1] un grupo de subprocesos mantiene múltiples subprocesos esperando que el programa supervisor asigne tareas para su ejecución simultánea . Al mantener un grupo de subprocesos, el modelo aumenta el rendimiento y evita la latencia en la ejecución debido a la frecuente creación y destrucción 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 paralela 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. Suele ser un parámetro ajustable de la aplicación, ajustado para optimizar el rendimiento del programa. [3] Decidir el tamaño óptimo del grupo de subprocesos es crucial para optimizar el rendimiento.

Un beneficio 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 restringe a la creación inicial del grupo, lo que puede resultar en un mejor rendimiento y una mejor estabilidad del sistema . Crear y destruir un hilo 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 provoca penalizaciones en el 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 asociándola con un subproceso que vive durante el transcurso de más de una transacción de red.

El uso de un grupo de subprocesos puede resultar útil incluso si se reserva 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 subprocesos a un nivel superior al que se puede hacer fácilmente cuando se administran subprocesos manualmente. [4] [5] En estos casos, los beneficios de rendimiento del uso pueden ser secundarios.

Normalmente, un grupo de subprocesos se ejecuta en una sola computadora. Sin embargo, los grupos de subprocesos están relacionados conceptualmente con granjas de servidores en las que un proceso maestro, que podría ser un grupo de subprocesos en sí, distribuye tareas a procesos de trabajo en diferentes computadoras, para aumentar el rendimiento general. Problemas vergonzosamente paralelos son muy susceptibles a este enfoque. [ cita necesaria ]

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 ] 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:

Ver también

Referencias

  1. ^ Garg, Rajat P. & Sharapov, Ilya Técnicas para optimizar aplicaciones: informática de alto rendimiento Prentice-Hall 2002, p. 394
  2. ^ Holub, Allen (2000). Domar los hilos de Java . Presione. pag. 209.
  3. ^ Yibei Ling; Tracy Mullen; Xiaola Lin (abril de 2000). "Análisis del tamaño óptimo del grupo de subprocesos". Revisión de los sistemas operativos ACM SIGOPS . 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 grupo de subprocesos de C++ moderna y eficiente". GitHub . 2019-09-24.

enlaces externos