0

TPL中的線程池究竟如何工作?一些網友說,它的工作原理是:ThreadPool是如何工作的?

  • 線程首先檢查其本地隊列
  • 該線程隨後檢查全局隊列
  • ,最後的線程檢查周圍的本地隊列

然而,Joe Duffy在Windows上的併發編程並行編程說它的工作原理是:

  • 線程首先檢查其本地隊列
  • 該線程將檢查周圍的本地隊列
  • ,最後線程檢查全局隊列

誰是正確的?

回答

2

在這種情況下,博客似乎是正確的;

它首先查看其本地隊列的頭部,然後在全局 隊列中,然後在其他線程的本地隊列中查找。

來源:MSDN,請參閱「工作竊取」

+0

這將只是讓更多的意義,如果它首先檢查周圍的本地隊列,以減少對全局隊列上的鎖... – ebb

+0

全局隊列已在.NET 4中改進爲使用無鎖算法,避免了在周圍的本地隊列之前進入全局隊列所產生的任何潛在性能問題。 –

+0

[CLR 4.0 ThreadPool改進](http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx)博客文章埃裏克埃雷布萊希特是一個好開始。 –