據微軟(link),有兩種方法來啓動一個任務:隱和明確。任務並行(TPL)和任務調度在C#
假設我在主線程中創建了4個不同的任務,分別稱爲task1,task2,task3和task4。
案例1:我跑所有這些,明確在主線程:
task1.Start();
task2.Start();
task3.Start();
task4.Start();
案例2:我運行它們隱含使用Parallel.Invoke方法在主線程:
Parallel.Invoke(task1, task2, task3, task4);
的我注意到的唯一區別是在case2中,主線程暫停,直到Invoke()返回。
我的問題是關於任務調度程序。 在調度方面,它們在case1和case2中的行爲有4個不同的任務嗎?它們是完全等價的嗎?
在我上面我們已經提到的相同鏈接閱讀:
在後臺,任務排隊到線程池,這一直是 加強與算法(如爬山)決定和 調整最大化吞吐量的線程數量。這使得 任務相對輕量級,並且您可以創建其中的許多任務來啓用細粒度並行。爲了補充這一點,採用廣爲人知的工作竊取算法來提供負載平衡。
這是好奇還是你有一些代碼依賴於這些信息? – Tudor 2012-02-08 15:50:35
是的。它出於好奇。我沒有找到任何參考,所以我決定發佈這個看看是否有人可以給我一個提示。 – ManiAm 2012-02-08 17:43:03