資料平行處理原則 (工作平行程式庫)

「資料平行處理原則」(Data Parallelism) 是指對來源集合或陣列中的各項目並行 (即平行) 執行同一個作業的情節。 具有命令式語法的資料平行處理原則是由 System.Threading.Tasks.Parallel 類別中 ForForEach 方法的數個多載所支援。 在資料平行作業中,來源集合可進行分割,以讓多個執行緒可同時在不同的區段上運作。 TPL 可透過 System.Threading.Tasks.Parallel 類別支援資料平行處理。 此類別可提供 forforeach 迴圈 (在 Visual Basic 中為 For 和 For Each) 以方法為基礎的平行實作。 為 Parallel.ForParallel.ForEach 迴圈撰寫迴圈邏輯的方式,大致上與撰寫循序迴圈相同。 您無須建立執行緒或佇列工作項目。 在基本迴圈中,您無須使用鎖定。 TPL 會為您處理所有的低階工作。 下列程式碼範例說明簡單的 foreach 迴圈及其平行對等項目。

注意事項注意事項

本文件使用 Lambda 運算式來定義 TPL 中的委派。如果您不太熟悉 C# 或 Visual Basic 中的 Lambda 運算式,請參閱 PLINQ 和 TPL 中的 Lambda 運算式

' Sequential version        
For Each item In sourceCollection
    Process(item)
Next

' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
// Sequential version            
foreach (var item in sourceCollection)
{
    Process(item);
}

// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));

當平行迴圈執行時,TPL 會分割資料來源,讓迴圈可以同時在多個部分上運作。 工作排程器會根據系統資源和工作負載,在幕後分割工作。 如果工作負載不平衡,排程器會在情況允許時將工作重新分配給多個執行緒和處理器。

注意事項注意事項

您也可以提供自己的自訂 Partitioner 或排程器。如需詳細資訊,請參閱 PLINQ 和 TPL 的自訂 Partitioner工作排程器

Parallel.ForParallel.ForEach 方法都有數個多載,可讓您停止或中斷迴圈執行、監視其他執行緒上迴圈狀態、維護執行緒區域狀態、完成執行緒區域物件、控制並行程度等等。 可啟用此功能的 Helper 型別包括 ParallelLoopStateParallelOptionsParallelLoopResultCancellationTokenCancellationTokenSource

如需詳細資訊,請參閱資料平行處理原則 (工作平行程式庫)

具有宣告式 (或類似查詢) 語法的資料平行處理原則是由 PLINQ 所支援。 如需詳細資訊,請參閱平行 LINQ (PLINQ)

相關主題

標題

說明

HOW TO:撰寫簡單的 Parallel.For 迴圈

說明如何對任何陣列或可索引的 IEnumerable<T> 來源集合撰寫 For 迴圈。

HOW TO:撰寫簡單的 Parallel.ForEach 迴圈

說明如何對任何 IEnumerable<T> 來源集合撰寫 ForEach 迴圈。

HOW TO:停止或中斷 Parallel.For 迴圈

說明如何停止或中斷平行迴圈,讓所有執行緒都能獲知動作。

HOW TO:撰寫含有執行緒區域變數的 Parallel.For 迴圈

說明如何撰寫 For 迴圈 (其中的每個執行緒都保有一個任何其他執行緒所看不見的私用變數),以及如何在迴圈完成時同步處理所有執行緒的結果。

HOW TO:撰寫含有執行緒區域變數的 Parallel.ForEach 迴圈

說明如何撰寫 ForEach 迴圈 (其中的每個執行緒都保有一個任何其他執行緒所看不見的私用變數),以及如何在迴圈完成時同步處理所有執行緒的結果。

HOW TO:取消 Parallel.For 或 ForEach 迴圈

說明如何使用 System.Threading.CancellationToken 取消平行迴圈。

HOW TO:加速小型迴圈主體

說明如何在迴圈主體很小時加快執行速度。

工作平行程式庫

提供工作平行程式庫的概觀。

以 .NET Framework 進行平行程式設計

介紹 .NET Framework 中的平行程式設計。

請參閱

概念

以 .NET Framework 進行平行程式設計