¿Cómo se implementaría un conjunto de subprocesos? He estado leyendo en Wikipedia para "threadpool" pero todavía no puedo entender qué se debe hacer para resolver esta pregunta (posiblemente porque no entendí lo que es un threadpool en términos simples).
¿Alguien puede explicarme en inglés simple qué es un threadpool y cómo respondería a esta pregunta?
fuente
El grupo de subprocesos es una colección de subprocesos administrados generalmente organizados en una cola, que ejecutan las tareas en la cola de tareas.
Crear un nuevo objeto de subproceso cada vez que necesita que algo se ejecute de forma asincrónica es costoso. En un grupo de subprocesos, simplemente agregaría las tareas que desea ejecutar de forma asíncrona a la cola de tareas y el grupo de subprocesos se encarga de asignar un subproceso disponible, si corresponde, para la tarea correspondiente. Tan pronto como se complete la tarea, el subproceso ahora disponible solicita otra tarea (suponiendo que quede alguna).
El grupo de subprocesos lo ayuda a evitar crear o destruir más subprocesos de los que realmente serían necesarios.
Comenzaría creando una clase con una cola de hilos y una cola de tareas. Luego implemente un método que agregue una tarea a la cola de tareas y avance desde allí. Obviamente, también debe permitir establecer los subprocesos máximos permitidos en un grupo de subprocesos.
fuente
En la aplicación multiproceso, el grupo de subprocesos es un "grupo de subprocesos disponibles" que puede utilizar su aplicación. Por lo general, por ejemplo .NET, todo se gestiona, por lo que solo debe asignar tareas y una vez que un subproceso esté libre, lo realizará. Entonces, para implementar un conjunto de subprocesos, esperaría crear un concepto donde las tareas sean tomadas automáticamente por subprocesos libres sin creación explícita de subprocesos para cada tarea.
fuente
Ejemplo de la vida real;
Tiene una instalación allí donde trabajan 12 personas. Hay 3 secciones de esta instalación. Cocina, baños y seguridad. Si no utiliza la técnica de grupo de subprocesos, así es como funciona: las 12 personas estarán paradas en una sala de reuniones, si los nuevos clientes acuden a las instalaciones y solicitan tareas, separará a las personas en grupos y las enviará a hacer su trabajo. y vuelve a la sala de reuniones. Pero, antes de cumplir con su deber, hay una fase de preparación. Necesitan usar el uniforme correcto, equipar ciertos dispositivos y caminar hacia esa sección, terminar el trabajo y regresar. Entonces, una vez cada vez que terminan su trabajo (el hilo termina), necesitan caminar de regreso a la sala de reuniones, desvestirse, sacar el equipo y esperar el próximo trabajo. Estos se refieren a la creación de contexto de subproceso, es la asignación de memoria y la información de seguimiento por sistema operativo.
Si está utilizando la agrupación de subprocesos, entonces, temprano en la mañana, asignará 6 personas a la cocina, 2 personas al baño y 4 personas a la seguridad. Por lo tanto, solo se prepararán una vez al día. Incluso si no hay clientes en la cocina, esas 4 personas estarán allí, inactivas, para cualquier tarea futura. No necesitan volver a la sala de reuniones hasta que la cocina cierre (la aplicación finaliza). Estas 4 personas están en el grupo de aplicaciones de Cocina y están listas para servir rápidamente. Pero no puede prometer que están trabajando todo el día, ya que la cocina puede estar inactiva de vez en cuando. La misma lógica se aplica para los baños y la seguridad también.
En el primer escenario, no desperdicia ningún hilo para ninguna tarea, PERO tomará una buena cantidad de tiempo preparar cada hilo para cada tarea. En el segundo, prepara los subprocesos por adelantado, por lo que no puede garantizar que usará todos los subprocesos para todas las tareas, pero el sistema operativo hace una gran optimización en él, por lo que puede confiar en él de manera segura.
fuente