¿Qué es un grupo de subprocesos?


62

¿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?

Respuestas:


96

Un grupo de subprocesos es un grupo de subprocesos inactivos previamente instanciados que están listos para recibir trabajo. Estos se prefieren a la creación de instancias de nuevos subprocesos para cada tarea cuando hay una gran cantidad de tareas cortas para realizar en lugar de una pequeña cantidad de tareas largas. Esto evita tener que incurrir en la sobrecarga de crear un hilo una gran cantidad de veces.

La implementación variará según el entorno, pero en términos simplificados, necesita lo siguiente:

  • Una forma de crear hilos y mantenerlos en un estado inactivo. Esto se puede lograr haciendo que cada hilo espere en una barrera hasta que la piscina lo maneje. (Esto también podría hacerse con mutexes).
  • Un contenedor para almacenar los subprocesos creados, como una cola o cualquier otra estructura que tenga una forma de agregar un subproceso al grupo y extraer uno.
  • Una interfaz estándar o clase abstracta para que los hilos los usen al hacer el trabajo. Esta podría ser una clase abstracta llamada Taskcon un execute()método que hace el trabajo y luego regresa.

Cuando se crea el grupo de subprocesos, creará una instancia de un cierto número de subprocesos para ponerlos a disposición o creará nuevos según sea necesario según las necesidades de la implementación.

Cuando se le entrega un grupo a un grupo Task, toma un hilo del contenedor (o espera a que haya uno disponible si el contenedor está vacío), lo entrega Tasky se encuentra con la barrera. Esto hace que el hilo inactivo reanude la ejecución, invocando el execute()método del Taskque se le dio. Una vez que se completa la ejecución, el hilo se devuelve a la piscina para colocarlo en el contenedor para su reutilización y luego se encuentra con su barrera, quedando dormido hasta que se repite el ciclo.


19
Un grupo de subprocesos es un grupo de subprocesos inactivos previamente instanciados que están listos para recibir trabajo. [...] Esto evita tener que incurrir en la sobrecarga de crear un hilo una gran cantidad de veces. - Esto debería ser escupido por Google cada vez que alguien busca "grupo de subprocesos"
Rafael Eyng

¿La creación del grupo de subprocesos implica una barrera interna? ¿Puedes compartir referencia, en estas líneas?
sobreexchange

@overexchange No, no lo hace. Mi referencia a esta pregunta fue como un ejemplo de una mejor manera de volver a escribir su pregunta de barrera . (Si lo hace, escribiré una respuesta.)
Blrfl

Una de las mejores respuestas cortas.
Blood-HaZaRd

10

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.


1

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.


1

Ejemplo de la vida real;

  1. Instalación: sistema operativo
  2. Secciones: Aplicaciones
  3. Personas: hilos

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.