我在MSDN中讀過它並不能保證TPL(任務並行庫)將並行運行邏輯/代碼。所以我的問題是,在什麼情況下代碼將按順序運行。TPL按順序執行代碼
當代碼部署到單核處理器?或者.Net框架線程池發生飢餓時?或者當「硬件線程」/「邏輯核心」太忙而無法在當時僅分配一個「硬件線程」/「邏輯核心」時?
我在MSDN中讀過它並不能保證TPL(任務並行庫)將並行運行邏輯/代碼。所以我的問題是,在什麼情況下代碼將按順序運行。TPL按順序執行代碼
當代碼部署到單核處理器?或者.Net框架線程池發生飢餓時?或者當「硬件線程」/「邏輯核心」太忙而無法在當時僅分配一個「硬件線程」/「邏輯核心」時?
它由TPL方法的TaskScheduler set in the ParallelOptions決定。這可以讓你輕鬆地用a custom one替換TaskScheduler,它可以做任何你想要的並行化計劃。
TPL和PLINQ使用的默認調度程序是ThreadPool。它將首先使用一個線程,然後添加更多的線程,因爲它的算法檢測到更多的線程會有用(但是如果您的任務不是CPU綁定的,算法可能會做出一些不正確的假設和cause you problems)。
我強烈建議你閱讀免費的書Patterns for Parallel Programming,它會介紹一些相關細節。然而,我已閱讀的最好的書涉及了關於任務調度程序如何工作的大量細節Professional Parallel Programming with C#(第8章全部是關於線程池)。
我也推薦你下載包Samples for Parallel Programing with the .NET framework,它裏面有一大堆好評的項目,這有助於解釋很多並行編程的概念。