¿Qué es un grupo de subprocesos?

¿Cómo se implementaría un threadpool? 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ía muy bien qué es un threadpool en términos simples).

¿Alguien puede explicarme en inglés simple qué es un hilo común y cómo respondería a esta pregunta?

Responder

Un hilo pool es un grupo de subprocesos inactivos preinstanciados que están listos para recibir trabajo. Se prefieren a la instanciación de subprocesos nuevos para cada tarea cuando hay una gran cantidad de tareas cortas por hacer en lugar de una pequeña cantidad de 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 subprocesos y mantenerlos en estado inactivo. Esto se puede lograr haciendo que cada subproceso espere en una barrera hasta que el grupo lo entregue en funcionamiento. (Esto se puede hacer con mutexes también.)
  • 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 subprocesos utilicen al realizar 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, 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 se entregue un Task, toma un hilo del contenedor (o espera a que uno esté disponible si el contenedor está vacío), le entrega un Task, y encuentra la barrera. Esto hace que el hilo 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 colocado en el contenedor para su reutilización y luego encuentra su barrera, poniéndose a dormir hasta que el ciclo se repite.

Comentarios

  • Un grupo de subprocesos es un grupo de subprocesos inactivos preinstanciados que están listos para recibir trabajo. […] Esto evita tener que incurrir en la sobrecarga de crear un subproceso una gran cantidad de veces. : esto debe ser escuchado por Google cada vez que alguien busque » subproceso pool »
  • ¿La creación de subprocesos implica una barrera internamente? ¿Puede compartir referencias, en estas líneas?
  • @overexchange No, no es así. Mi referencia a esta pregunta fue un ejemplo de una mejor manera de volver a escribir su pregunta de barrera . (Si lo hace, escribiré una respuesta).
  • una de las mejores respuestas breves.

Respuesta

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 hilo cada vez que necesite que algo se ejecute de forma asincrónica es caro. En un grupo de subprocesos, simplemente agregaría las tareas que desea que se ejecuten de forma asincrónica 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 algo).

El grupo de subprocesos le 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 subprocesos 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 hacer posible establecer el número máximo de subprocesos permitidos en un grupo de subprocesos.

Respuesta

Ejemplo de la vida real;

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

Tienes una instalación allí 12 personas están trabajando. Hay 3 secciones de esta instalación. Cocina, baños y seguridad. Si no utiliza la técnica del grupo de subprocesos, así es como funciona: las 12 personas estarán de pie en una sala de reuniones, si llegan nuevos clientes a las instalaciones y solicitan tareas, entonces separará a las personas en grupos y las enviará a hacer. su trabajo y regresar a la sala de reuniones. Pero, antes de ir a su trabajo, hay una fase de preparación. Deben usar el uniforme correcto, equipar ciertos dispositivos y caminar hasta esa sección, terminar el trabajo y regresar. Entonces, una vez cada vez que terminan su trabajo (termina el hilo), necesitan caminar de regreso a la sala de reuniones, desvestirse el uniforme, sacar el equipo y esperar el próximo trabajo. Se refieren a la creación de contexto del hilo, es la asignación de memoria y la información de seguimiento por sistema operativo.Es demasiado tiempo para que el sistema operativo reorganice las necesidades de nuevos subprocesos.

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 seguridad. Entonces, solo harán su preparación una vez al día. Incluso si no hay clientes en la cocina, esas 4 personas estarán allí, inactivas, para las próximas tareas. No es necesario que regresen a la sala de reuniones hasta que se cierre la cocina (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 quedarse inactiva de vez en cuando. La misma lógica se aplica también a los baños y la seguridad.

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, usted prepara los subprocesos con anticipación, por lo que no puede garantizar que usará todos los subprocesos para todas las tareas, pero el sistema operativo en su mayoría realiza una gran optimización, por lo que puede confiar en él de manera segura.

Respuesta

En una aplicación multiproceso, el grupo de subprocesos es un «grupo de subprocesos disponibles» que su aplicación puede utilizar. Por lo general, p. Ej. .NET, todo está administrado, por lo que solo asigna tareas y una vez que un hilo está libre, lo va a realizar. Entonces, para implementar un grupo de subprocesos, esperaría crear un concepto en el que los subprocesos libres realicen las tareas automáticamente sin la creación explícita de subprocesos para cada tarea.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *