2010-12-26 3 views
12

Je suis actuellement en train de rechercher Task Parallel Library et j'ai lu quelque part que TPL utilise réellement le mécanisme de pool de threads de CLR-Level. Je n'ai trouvé aucun article confirmant cette information. Je sais, TPL a des files d'attente de tâches pour chaque thread et utilise un algorithme de vol de travail spécial pour l'équilibrage. Pour autant que je sache, cela crée un fil pour chaque processeur. Les pools de threads ont commencé à utiliser des objets de tâche de TPL depuis .NET 4.(Comment) TPL utilise-t-il (CLR) Thread Pool?

Je ne comprends pas comment TPL utilise le pool de threads. Les états de modèle Thread-Pool, les éléments de travail sont mis en file d'attente et les threads libres dans le pool de threads en prennent un dans cette file d'attente. TPL stocke cependant les objets (tâches) dans les files d'attente des threads et les travaux de vol de travail si nécessaire ... Ainsi, tout à fait différemment. Où est mon erreur?

question supplémentaire: Comme il s'agissait de ma première question de dépassement de pile, je ne suis pas sûr que ce soit approprié. Est-ce?

+1

(C'est très bien comme une question SO, d'ailleurs.) –

Répondre

9

Dans TPL, un TaskScheduler est responsable de la mise en file d'attente des tâches en attente d'exécution. Le planificateur Default utilisera le pool de threads - mais je crois que c'est la nouvelle implémentation du pool de threads qui fait réellement l'ingéniosité du voleur de travail. Daniel Moth a un blog post avec quelques détails supplémentaires que vous pourriez trouver utiles.

+1

L'article est très utile, merci. Je comprends la raison de ma confusion: la logique des tâches et le vol de travail ont été conçus dans le cadre de la NPT. Mais l'implémentation est dans le pool de threads. Cela a fait évoluer le pool de threads vers un "pool avec work-stealing". Merci encore. – eks

Questions connexes