共用方式為


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

「資料平行處理原則」是指在來源集合或陣列中的元素上,同時 (也就是平行) 執行相同作業的情節。 在資料平行作業中,會將來源集合分割,讓多個執行緒可以同時在不同區段上操作。

工作平行程式庫 (TPL) 會透過 System.Threading.Tasks.Parallel 類別支援資料平行處理原則。 這個類別針對 forforeach 迴圈 (在 Visual Basic 中為 ForFor Each),提供以方法為基礎的平行實作。 針對 Parallel.ForParallel.ForEach 迴圈撰寫迴圈邏輯的方式,和撰寫循序迴圈很像。 您不必建立執行緒或佇列工作項目。 在基本迴圈中,您不必採用鎖定。 TPL 會為您處理所有低階工作。 如需有關 Parallel.ForParallel.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 會分割資料來源,讓迴圈可以同時在多個部分上操作。 在幕後,工作排程器會依據系統資源和工作負載來分割工作。 如果工作負載變得不平衡,在可能的情況下,排程器會在多個執行緒與處理器之間轉散發工作。

注意

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

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

如需詳細資訊,請參閱平行程式設計模式:了解及套用使用 .NET Framework 4 的平行模式

PLINQ 可支援使用宣告式 (或類似查詢) 語法的資料平行處理原則。 如需詳細資訊,請參閱 Parallel LINQ (PLINQ)

標題 描述
操作說明:撰寫簡單的 Parallel.For 迴圈 說明如何透過任何陣列或可建立索引的 IEnumerable<T> 來源集合,撰寫 For 迴圈。
操作說明:撰寫簡單的 Parallel.ForEach 迴圈 說明如何透過任何 IEnumerable<T> 來源集合,撰寫 ForEach 迴圈。
如何:停止或中斷 Parallel.For 迴圈 描述如何停止或中斷平行迴圈,讓所有執行緒都能收到動作的通知。
如何:撰寫含有執行緒區域變數的 Parallel.For 迴圈 說明如何撰寫 For 迴圈 (其中每個執行緒各維護一個任何其他執行緒都看不到的私用變數),以及當迴圈完成時,如何同步處理所有執行緒的結果。
如何:撰寫含有 Partition-Local 變數的 Parallel.ForEach 迴圈 說明如何撰寫 ForEach 迴圈 (其中每個執行緒各維護一個任何其他執行緒都看不到的私用變數),以及當迴圈完成時,如何同步處理所有執行緒的結果。
如何:取消 Parallel.For 或 ForEach 迴圈 說明如何使用 System.Threading.CancellationToken 來取消平行迴圈
如何:加速小型迴圈主體 說明當迴圈主體非常小時,用來加速執行的一種方法。
工作平行程式庫 (TPL) 提供工作平行程式庫的概觀。
平行程式設計 介紹如何以 .NET Framework 進行平行程式設計。

另請參閱