簡體   English   中英

C#中的任務並行(TPL)和任務調度

[英]Task Parallelism (TPL) and Task Scheduling in C#

據微軟( 鏈接 ),有兩種方法來啟動一個任務:

假設我在主線程中創建了4個不同的任務,分別稱為task1,task2,task3和task4。

case1 :我在主線程中顯式運行它們:

task1.Start();
task2.Start();
task3.Start();
task4.Start();

case2 :我在主線程中使用Parallel.Invoke方法隱式運行它們:

Parallel.Invoke(task1, task2, task3, task4);

我注意到的唯一區別是在case2中,主線程掛起,直到Invoke()返回。

我的問題是關於任務計划程序的 任務計划程序在case1和case2中執行4個任務時,它們的調度方式是否完全相同?

在我上面提到的同一鏈接中,我們看到:

在后台,任務被排隊到ThreadPool中,該線程池已通過算法(例如爬山)進行了增強,該算法確定並調整了線程數量以最大化吞吐量。 這使任務相對輕量,您可以創建許多任務以啟用細粒度的並行性。 為了補充這一點,采用了廣為人知的工作竊取算法來提供負載平衡。

Parallel團隊的這篇博客文章應該回答您的一些問題。

簡短的答案:使用Tasks,您將必須在主線程上執行Task :: WaitAll(...),以防止退出Parallel :: Invoke會真正為您處理的地方。 除此之外,別無其他,因為在Parallel :: Invoke下使用了相同的TPL基礎結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM