¿Qué es un grupo de subprocesos?

51

¿Cómo se implementaría un conjunto de subprocesos? He estado leyendo en wikipedia "threadpool" pero todavía no puedo averiguar qué se debe hacer para resolver esta pregunta (posiblemente porque no entendí lo que es un threadpool en términos simples).

¿Puede alguien explicarme en inglés sencillo qué es un subproceso y cómo respondería esta pregunta?

    
pregunta John Smith 04.11.2012 - 17:14

4 respuestas

87

Un grupo de subprocesos es un grupo de subprocesos inactivos pre-instanciados que están listos para recibir trabajo. Estos se prefieren a la creación de instancias de subprocesos nuevos para cada tarea cuando hay una gran cantidad de tareas cortas que realizar en lugar de una pequeña cantidad de tareas largas. Esto evita tener que incurrir en la sobrecarga de crear un subproceso muchas 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 estado inactivo. Esto se puede lograr haciendo que cada hilo espere en una barrera hasta que la piscina funcione. (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 manera de agregar un subproceso al grupo y extraer uno.
  • Una interfaz estándar o una clase abstracta para los subprocesos para usar en el trabajo. Esta podría ser una clase abstracta llamada Task con un método execute() que hace el trabajo y luego regresa.

Cuando se crea el grupo de subprocesos, se creará una instancia de un cierto número de subprocesos para que estén disponibles o creará otros nuevos según sea necesario según las necesidades de la implementación.

Cuando el grupo recibe un Task , toma un hilo del contenedor (o espera que uno esté disponible si el contenedor está vacío), le da un Task y encuentra la barrera. Esto hace que el subproceso inactivo reanude la ejecución, invocando el método execute() del Task que se le dio. Una vez que se completa la ejecución, el hilo se devuelve a la piscina para ser reutilizado en el contenedor y luego se encuentra con su barrera, poniéndose en reposo hasta que el ciclo se repite.

    
respondido por el Blrfl 04.11.2012 - 17:55
8

El grupo de subprocesos es una colección de subprocesos administrados organizados generalmente en una cola, que ejecuta las tareas en la cola de tareas.

Crear un nuevo objeto de subproceso cada vez que necesite que algo se ejecute de forma asíncrona 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 lo hay, para la tarea correspondiente. Tan pronto como se completa la tarea, el subproceso ahora disponible solicita otra tarea (asumiendo que queda alguna).

El grupo de subprocesos te ayuda a evitar la creación o destrucción de más subprocesos, de lo que realmente sería necesario.

Empezarí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 continúe desde allí. Obviamente, también debería permitir establecer los subprocesos máximos permitidos en un grupo de subprocesos.

    
respondido por el Dante 04.11.2012 - 17:53
1

Ejemplo de la vida real;

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

Usted 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 agrupación de subprocesos, así es como funciona: las 12 personas estarán paradas en una sala de reuniones, si los clientes nuevos acuden a las instalaciones y solicitan tareas, separará a las personas en grupos y las enviará a hacer su trabajo. , y volver a la sala de reuniones. Pero, antes de que vayan a su deber, hay una fase de preparación. Necesitan usar el uniforme correcto, equipar ciertos dispositivos y caminar a esa sección, terminar el trabajo y regresar. Por lo tanto, una vez cada vez que terminan su trabajo (el hilo finaliza), tienen que regresar a la sala de reuniones, desvestirse del uniforme, sacar el equipo y esperar el próximo trabajo. Estos se refieren a la creación de contexto de hilos, es la asignación de memoria y la información de seguimiento por sistema operativo. El sistema operativo requiere demasiado tiempo para reorganizar las nuevas necesidades de subprocesos.

Si está usando la combinación de hilos, a la mañana temprano, asignará a 6 personas a la cocina, 2 a los baños y 4 a la seguridad. Entonces, solo harán su preparación una vez en un 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 se cierre (la aplicación termina). Estas 4 personas están en el grupo de aplicaciones de la cocina y están listas para servir rápidamente. Pero no puede prometer que trabajarán todo el día, ya que la cocina puede volverse ociosa de vez en cuando. La misma lógica se aplica a los baños y la seguridad también.

En el primer escenario, no desperdicia ningún hilo por ninguna tarea, PERO tomará una buena cantidad de tiempo para 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, por lo que puede confiar en ello con seguridad.

    
respondido por el Teoman shipahi 24.02.2017 - 22:28
0

En la aplicación de multiproceso, el grupo de subprocesos es un "grupo de subprocesos disponibles" que puede utilizar su aplicación. Por lo general, por ejemplo .NET, todo está administrado, por lo que solo asigna tareas y una vez que un subproceso está libre, lo realizará. Así que para implementar un conjunto de subprocesos, esperaría crear un concepto en el que los subprocesos gratuitos realicen las tareas sin la creación explícita de subprocesos para cada tarea.

    
respondido por el PTS 04.11.2012 - 17:29

Lea otras preguntas en las etiquetas