2010-12-26 16 views
12

Attualmente sto effettuando ricerche su Task Parallel Library e ho letto da qualche parte che TPL utilizza effettivamente il meccanismo del pool di thread di CLR-Level. Non ho trovato nessun articolo che confermasse questa informazione. Lo so, TPL ha code di attività per ogni thread e utilizza un algoritmo speciale per il furto del lavoro per il bilanciamento. Per quanto ne so, crea un thread per ogni processore. I pool di thread hanno iniziato a utilizzare oggetti task di TPL da .NET 4.(Come) TPL utilizza il pool di thread (CLR)?

Non riesco a capire come TPL utilizza il pool di thread. Gli stati del modello di pool di thread sono in coda e i thread liberi nel pool di thread ne prendono uno da questa coda. Tuttavia, TPL archivia gli elementi (attività) in code di thread e lavori di furto del lavoro, se necessario ... Quindi, in modo abbastanza diverso. Dov'è il mio errore?

domanda in più: poiché questa era la mia prima domanda di Stack Overflow, non sono sicuro che fosse adatta. È?

+1

(A proposito, è assolutamente soddisfacente.) –

risposta

9

In TPL, un TaskScheduler è responsabile per l'accodamento effettivo delle attività per l'esecuzione. Lo scheduler Default utilizzerà il pool di thread, ma credo che sia la nuova implementazione del pool di thread che in realtà esegue l'abilità di furto del lavoro.

Daniel Moth ha uno blog post con ulteriori dettagli che potrebbero essere utili.

+1

L'articolo è molto utile, grazie. Capisco il motivo della mia confusione: la logica delle attività e il furto del lavoro sono stati effettivamente progettati come parte di TPL. Ma l'implementazione è in pool di thread. Questo thread-pool evoluto diventa una "piscina con il furto del lavoro". Grazie ancora. – eks

Problemi correlati