0

Comment fonctionne le pool de threads dans TPL? Plusieurs blogs dit que cela fonctionne comme:Comment fonctionne ThreadPool?

  • Le fil vérifie d'abord la file d'attente locale
  • Le fil vérifie alors la file d'attente globale
  • Et enfin le fil vérifie les files d'attente locales autour

Cependant, le livre Programmation concurrente sur Windows par Joe Duffy, dit que cela fonctionne comme:

  • Le fil vérifie d'abord la file d'attente locale
  • Le fil vérifie ensuite les files d'attente locales autour
  • Et enfin le fil vérifie la file d'attente globale

Qui a raison?

Répondre

2

Les blogs semblent être corrects dans ce cas;

d'abord regarde la tête de sa file d'attente locale, puis dans la file d'attente mondiale, puis dans les files d'attente locales d'autres threads.

Source: MSDN, voir « Le travail Stealing »

+0

Il serait tout simplement plus de sens si elle a vérifié les files d'attente locales environnantes d'abord, pour réduire les verrous sur la file d'attente globale ... – ebb

+0

La file d'attente globale a été améliorée dans .NET 4 pour utiliser un algorithme sans verrou, évitant tout problème de performance potentiel créé en accédant à la file d'attente globale avant d'entourer les files d'attente locales. –

+0

Le [CLR 4.0 ThreadPool Improvements] (http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx) article de blog par Eric Eilebrecht est un bon début. –