資料平行處理原則 (工作平行程式庫)
「資料平行處理原則」(Data Parallelism) 是指對來源集合或陣列中的各項目並行 (即平行) 執行同一個作業的情節。 具有命令式語法的資料平行處理原則是由 System.Threading.Tasks.Parallel 類別中 For 和 ForEach 方法的數個多載所支援。 在資料平行作業中,來源集合可進行分割,以讓多個執行緒可同時在不同的區段上運作。 TPL 可透過 System.Threading.Tasks.Parallel 類別支援資料平行處理。 此類別可提供 for 和 foreach 迴圈 (在 Visual Basic 中為 For 和 For Each) 以方法為基礎的平行實作。 為 Parallel.For 或 Parallel.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.For 和 Parallel.ForEach 方法都有數個多載,可讓您停止或中斷迴圈執行、監視其他執行緒上迴圈狀態、維護執行緒區域狀態、完成執行緒區域物件、控制並行程度等等。 可啟用此功能的 Helper 型別包括 ParallelLoopState、ParallelOptions、ParallelLoopResult、CancellationToken 和 CancellationTokenSource。
如需詳細資訊,請參閱資料平行處理原則 (工作平行程式庫)。
具有宣告式 (或類似查詢) 語法的資料平行處理原則是由 PLINQ 所支援。 如需詳細資訊,請參閱平行 LINQ (PLINQ)。
相關主題
標題 |
說明 |
---|---|
說明如何對任何陣列或可索引的 IEnumerable<T> 來源集合撰寫 For 迴圈。 |
|
說明如何對任何 IEnumerable<T> 來源集合撰寫 ForEach 迴圈。 |
|
說明如何停止或中斷平行迴圈,讓所有執行緒都能獲知動作。 |
|
說明如何撰寫 For 迴圈 (其中的每個執行緒都保有一個任何其他執行緒所看不見的私用變數),以及如何在迴圈完成時同步處理所有執行緒的結果。 |
|
說明如何撰寫 ForEach 迴圈 (其中的每個執行緒都保有一個任何其他執行緒所看不見的私用變數),以及如何在迴圈完成時同步處理所有執行緒的結果。 |
|
說明如何使用 System.Threading.CancellationToken 取消平行迴圈。 |
|
說明如何在迴圈主體很小時加快執行速度。 |
|
提供工作平行程式庫的概觀。 |
|
介紹 .NET Framework 中的平行程式設計。 |