[英]parallel programming in TPL
我在.net 4.0中使用任務並行庫,我希望能夠為每個核心指定一個獨立於其他核心的任務。 通常在TPL中,我創建一個任務並告訴它並行運行,我無法控制創建的線程數,也無法控制參與並行任務的內核數。 此外,我無法指定每個特定的核心不同的任務。 我想知道如何在TPL中實現這一目標。
TPL動態縮放並發程度,以最有效地使用所有可用的處理器。 如果這是一個問題,TPL可能不適合您。
我所知道的最接近的東西是ParallelEnumerable.WithDegreesOfParallelism ,它設置將用於處理查詢的並發執行任務的最大數量。
聽起來這並不適合您的要求,所以也許您需要細粒度的控制,在這種情況下,我建議您直接使用線程。
我無法控制創建的線程數,也無法控制參與並行任務的內核數。
在設計上,第三方物流的目的是,你不必處理這些問題。 調整可能非常復雜,TPL表現出色。
正如其他人指出的那樣,您可能不想這樣做。
CodePlex上有一個ParallelExtensionsExtras庫,其中包含各種任務計划程序 ,其中一個是“每個任務線程”計划程序,另一個( LimitedConcurrencyLevelTaskScheduler
)允許您指定並行度。
但是,它們不提供與特定核心的線程關聯性。 您必須自己編寫代碼。
我剛剛注意到,有一種方法可以控制TPL中的並行度。 示例代碼如下,它使用ParallelOptions決定並行執行循環的最大並發性。
這摘自Richard Carr的文章: TPL中的並行度控制
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 2;
Parallel.For(0, 20, po, i =>
{
Console.WriteLine("{0} on Task {1}", i, Task.CurrentId);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.