2010-12-26 6 views
12

Actualmente estoy investigando la Biblioteca paralela de tareas y leí en alguna parte que TPL en realidad usa el mecanismo de grupo de subprocesos de CLR-Level. No pude encontrar ningún artículo que confirmara esta información. Lo sé, TPL tiene colas de tareas para cada hilo y utiliza algún algoritmo especial de robo de trabajo para equilibrar. Hasta donde yo sé, crea un hilo para cada procesador. Los grupos de subprocesos comenzaron a usar objetos de tarea de TPL desde .NET 4.(cómo) TPL usa (CLR) Thread Pool?

No puedo entender cómo TPL usa el grupo de subprocesos. Los estados de patrón de la agrupación de subprocesos, los elementos de trabajo se ponen en cola y los subprocesos libres en el grupo de subprocesos toman uno de esta cola. Sin embargo, TPL almacena los elementos (tareas) en colas de hilos y obras de robo de trabajo si es necesario ... Por lo tanto, de manera bastante diferente. ¿Dónde está mi error?

pregunta adicional: Como esta era mi primera pregunta sobre el desbordamiento de pila, no estoy seguro de si era adecuada. ¿Lo es?

+1

(Por cierto, está absolutamente bien como una pregunta de SO.) –

Respuesta

9

En TPL, un TaskScheduler es responsable de poner en cola las tareas para su ejecución. El programador Default usará el grupo de hilos, pero creo que es la nueva implementación del conjunto de hilos lo que realmente hace que el ingenio para robar el trabajo.

Daniel Moth tiene un blog post con algunos más detalles que pueden serle de utilidad.

+1

El artículo es muy útil, gracias. Entiendo la razón de mi confusión: la lógica de la tarea y el robo de trabajo en realidad fueron diseñados como parte de TPL. Pero la implementación está en el grupo de hilos. Este grupo de hilos evolucionó hacia un "grupo con robo de trabajo". Gracias de nuevo. – eks