2011-05-10 23 views
10

Estaba hojeando el pico, buscando la documentación en Thread, y encontré ThreadGroup.¿Para qué sirve el ThreadGroup de Ruby?

La documentación describe lo que hace, pero no explica para qué sirve.

¿Hay un grupo de subprocesos relacionado con un grupo de subprocesos que I assumed Ruby doesn't have?

+0

Duda de dejar una respuesta real, pero mirando los usos en la búsqueda de código de Google, creo que has dado en el clavo, es un hilo para los llamados hilos verdes. –

+0

@RussC Creo que es solo parte de la implementación de un grupo de subprocesos. Debes agregar datos de trabajo en una 'Cola' y hacer que los hilos extraigan elementos de la cola. Estoy basando esto en la definición de Wikipedia de un grupo de subprocesos: http://en.wikipedia.org/wiki/Thread_pool_pattern. Además, a partir de ruby ​​1.9, los hilos son nativos y no verdes. – Kelvin

Respuesta

7

Los hilos nuevos se crean en el ThreadGroup de sus padres. Puede utilizar ThreadGroup para organizar la estructura de árbol implícita dada por los subprocesos principales que generan otros subprocesos y usar el método de instancia list para obtener todos los subprocesos que aún no han finalizado, es decir, definir métodos que operen en todos los subprocesos del grupo.

Además, puede usar enclose para prohibir la adición (o eliminación) de subprocesos a este grupo, si ejecuta código que no es de confianza y desea vigilar los hilos que genera.

+2

¿Puede describir por qué desea usarlo, en lugar de qué hace? –

+1

Piense en ello como una matriz especializada en hilos. Puede organizar un conjunto de tareas simultáneas para verificar si todas las tareas de este conjunto están finalizadas, por ejemplo. Excepto por el método 'encierre ', es bueno mantener sus hilos organizados: la clase Thread no proporciona información sobre quién creó un hilo. Perheaps un ejemplo de un experimento en el que estoy trabajando: tengo muchos agentes corriendo simultáneamente, separados en equipos. Podría usar ThreadGroups para organizar los hilos del agente por equipo, para disminuir la prioridad de un equipo o para verificar cuántos hilos de agente de un equipo aún están vivos. – dhoelzgen