Dot-Net
(如何)TPL 是否使用(CLR)執行緒池?
我目前正在研究任務並行庫,並且在某處讀到 TPL 實際上使用了 CLR 級別的執行緒池機制。我找不到任何文章證實此資訊。我知道,TPL 對每個執行緒都有任務隊列,並使用一些特殊的工作竊取算法進行平衡。據我所知,它為每個處理器創建一個執行緒。從 .NET 4 開始,執行緒池開始使用 TPL 的任務對象。
我無法理解 TPL 如何使用執行緒池。執行緒池模式狀態,工作項排隊,執行緒池中的空閒執行緒從該隊列中獲取一個。然而,TPL 將項目(任務)儲存到執行緒隊列中,如果需要,工作竊取工作……因此,完全不同。我的錯誤在哪裡?
額外問題:由於這是我的第一個 Stack Overflow 問題,我不確定它是否合適。是嗎?
在 TPL 中,a
TaskScheduler負責實際將任務排隊等待執行。預設調度程序將使用執行緒池——但我相信它是新的執行緒池實現,它實際上做了竊取工作的聰明。Daniel Moth 有一篇博文,其中包含一些您可能會覺得有用的更多細節。