數據平行處理原則 是指在來源集合或數位中的項目上同時執行相同作業的案例(也就是平行執行)。 在數據平行作業中,會分割來源集合,讓多個線程可以同時在不同的區段上運作。
Task Parallel Library(TPL)透過System.Threading.Tasks.Parallel類別支援資料平行化。 這個類別提供基於方法的 for 和 foreach 迴圈的平行實作(在 Visual Basic 中為 For
和 For Each
)。 您可以撰寫 Parallel.For 或 Parallel.ForEach 迴圈的循環邏輯,就像撰寫循序迴圈一樣。 您不需要建立線程或佇列工作專案。 在基本迴圈中,您不需要上鎖。 TPL 會為您處理所有低階工作。 如需有關 Parallel.For 和 Parallel.ForEach 的深入資訊,請下載文件 平行程式設計模式:瞭解及套用 .NET Framework 4 的平行模式。 下列程式代碼範例顯示一個簡單的 foreach
迴圈及其平行等效版本。
備註
此文件使用 lambda 運算式在 TPL 中定義委派。 如果您不熟悉 C# 或 Visual Basic 中的 Lambda 運算式,請參閱在 PLINQ 和 TPL 中Lambda 運算式。
// Sequential version
foreach (var item in sourceCollection)
{
Process(item);
}
// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));
' Sequential version
For Each item In sourceCollection
Process(item)
Next
' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
當平行迴圈執行時,TPL 會分割數據源,讓迴圈可以同時在多個元件上運作。 在幕後,工作排程器會根據系統資源和工作負載來分割工作。 可能的話,如果工作負載變得不平衡,排程器會在多個線程和處理器之間轉散發工作。
備註
您也可以提供自己的自訂分割器或排程器。 如需詳細資訊,請參閱 PLINQ 和 TPL 的自定義分割器 和 工作排程器。
Parallel.For和 Parallel.ForEach 方法都有數個多載,可讓您停止或中斷迴圈執行、監視其他線程上的循環狀態、維護線程區域狀態、完成線程區域物件、控制並行程度等等。 開啟這項功能的協助程式類型包括 ParallelLoopState、 ParallelOptions、 ParallelLoopResult、、 CancellationToken 和 CancellationTokenSource。
如需詳細資訊,請參閱 平行程序設計模式:瞭解和套用 .NET Framework 4 的平行模式。
PLINQ 支援使用宣告式或類似查詢語法的資料平行運算。 如需詳細資訊,請參閱 平行 LINQ (PLINQ) 。
[相關主題]
標題 | 說明 |
---|---|
如何:撰寫簡單的 Parallel.For 迴圈 | 描述如何撰寫For迴圈以遍歷任何陣列或可編製索引的IEnumerable<T>來源集合。 |
如何:撰寫簡單的 Parallel.ForEach 迴圈 | 描述如何針對任何ForEach來源集合撰寫IEnumerable<T>迴圈。 |
如何停止或中斷 Parallel.For 迴圈 | 描述如何停止或中斷平行迴圈,以便通知所有線程的動作。 |
如何:使用 Thread-Local 變數撰寫 Parallel.For 迴圈 | 描述如何撰寫 For 迴圈,其中每個線程都會維護任何其他線程看不到的私人變數,以及如何在迴圈完成時同步處理所有線程的結果。 |
如何:使用 Partition-Local 變數撰寫 Parallel.ForEach 迴圈 | 描述如何撰寫 ForEach 迴圈,其中每個線程都會維護任何其他線程看不到的私人變數,以及如何在迴圈完成時同步處理所有線程的結果。 |
如何取消 Parallel.For 或 ForEach 迴圈 | 描述如何使用 System.Threading.CancellationToken 來取消平行迴圈 |
如何加速小型迴圈體 | 描述迴圈主體非常小時加速執行的一種方式。 |
工作平行程式庫 (TPL) | 提供工作平行程式庫的概觀。 |
平行程式設計 | 介紹 .NET Framework 中的平行程序設計。 |