簡體   English   中英

TPL中的並行編程

[英]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.

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