Równoległość danych (Biblioteka zadań równoległych)Data Parallelism (Task Parallel Library)

Równoległość danych odwołuje się do scenariuszy, w których ta sama operacja jest wykonywana współbieżnie (czyli równolegle) dla elementów w kolekcji źródłowej lub tablicy.Data parallelism refers to scenarios in which the same operation is performed concurrently (that is, in parallel) on elements in a source collection or array. W operacjach Parallel Data kolekcja źródłowa jest partycjonowana tak, aby wiele wątków mogło działać jednocześnie na różnych segmentach.In data parallel operations, the source collection is partitioned so that multiple threads can operate on different segments concurrently.

Biblioteka zadań równoległych (TPL) obsługuje równoległość danych za pomocą klasy System.Threading.Tasks.Parallel.The Task Parallel Library (TPL) supports data parallelism through the System.Threading.Tasks.Parallel class. Ta klasa zapewnia oparte na metodzie równoległe implementacje pętli for i foreach (For i For Each w Visual Basic).This class provides method-based parallel implementations of for and foreach loops (For and For Each in Visual Basic). Można napisać logikę pętli dla Parallel.For lub Parallel.ForEach pętli znacznie tak, jak napisać pętla sekwencyjna.You write the loop logic for a Parallel.For or Parallel.ForEach loop much as you would write a sequential loop. Nie trzeba tworzyć wątków ani elementów roboczych kolejki.You do not have to create threads or queue work items. W przypadku pętli podstawowych nie trzeba podejmować blokad.In basic loops, you do not have to take locks. TPL obsługuje wszystkie zadania niskiego poziomu.The TPL handles all the low-level work for you. Aby uzyskać szczegółowe informacje na temat używania Parallel.For i Parallel.ForEach, Pobierz wzorce dokumentu dla programowania równoległego: zrozumienie i stosowanie wzorców równoległych za pomocą .NET Framework 4.For in-depth information about the use of Parallel.For and Parallel.ForEach, download the document Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4. Poniższy przykład kodu pokazuje prostą pętlę foreach i jej równoległą równoważność.The following code example shows a simple foreach loop and its parallel equivalent.

Uwaga

Ta dokumentacja używa wyrażeń lambda do definiowania delegatów w TPL.This documentation uses lambda expressions to define delegates in TPL. Jeśli nie znasz wyrażeń lambda w C# lub Visual Basic, zobacz wyrażenia lambda w PLINQ i TPL.If you are not familiar with lambda expressions in C# or Visual Basic, see Lambda Expressions in PLINQ and TPL.

// 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))

Po uruchomieniu pętli równoległej TPL partycjuje źródło danych, dzięki czemu pętla może działać na wielu częściach jednocześnie.When a parallel loop runs, the TPL partitions the data source so that the loop can operate on multiple parts concurrently. W tle Harmonogram zadań partycjonowania zadania na podstawie zasobów systemowych i obciążeń.Behind the scenes, the Task Scheduler partitions the task based on system resources and workload. Gdy to możliwe, usługa Scheduler dystrybuuje pracę między wieloma wątkami i procesorami, jeśli obciążenie zostanie niezrównoważone.When possible, the scheduler redistributes work among multiple threads and processors if the workload becomes unbalanced.

Uwaga

Możesz również dostarczyć własnych niestandardowych partycji lub harmonogramów.You can also supply your own custom partitioner or scheduler. Aby uzyskać więcej informacji, zobacz niestandardowe partycje dla PLINQ i TPL i harmonogramów zadań.For more information, see Custom Partitioners for PLINQ and TPL and Task Schedulers.

Metody Parallel.For i Parallel.ForEach mają kilka przeciążeń, które umożliwiają zatrzymanie lub przerwanie wykonywania pętli, monitorowanie stanu pętli w innych wątkach, zachowanie stanu wątku-Local, Finalizowanie obiektów lokalnych wątków, kontrolowanie stopnia współbieżności i tak dalej.Both the Parallel.For and Parallel.ForEach methods have several overloads that let you stop or break loop execution, monitor the state of the loop on other threads, maintain thread-local state, finalize thread-local objects, control the degree of concurrency, and so on. Typy pomocników, które umożliwiają włączenie tej funkcji, obejmują ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationTokeni CancellationTokenSource.The helper types that enable this functionality include ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken, and CancellationTokenSource.

Aby uzyskać więcej informacji, zobacz wzorce programowania równoległego: zrozumienie i stosowanie równoległych wzorców z .NET Framework 4.For more information, see Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4.

Równoległość danych przy użyciu deklaratywnej lub podobnej do zapytania składnia jest obsługiwana przez PLINQ.Data parallelism with declarative, or query-like, syntax is supported by PLINQ. Aby uzyskać więcej informacji, zobacz Parallel LINQ (PLINQ).For more information, see Parallel LINQ (PLINQ).

TytułTitle OpisDescription
Instrukcje: zapisywanie prostej pętli Parallel.ForHow to: Write a Simple Parallel.For Loop Opisuje, jak napisać pętlę Forą dla dowolnej tablicy lub do indeksowania IEnumerable<T> źródłowej kolekcji.Describes how to write a For loop over any array or indexable IEnumerable<T> source collection.
Instrukcje: zapisywanie prostej pętli Parallel.ForEachHow to: Write a Simple Parallel.ForEach Loop Opisuje sposób pisania pętli ForEachej dla dowolnej kolekcji źródłowej IEnumerable<T>.Describes how to write a ForEach loop over any IEnumerable<T> source collection.
Instrukcje: zatrzymywanie lub przerywanie ze równoległej pętli forHow to: Stop or Break from a Parallel.For Loop Opisuje, jak zatrzymać lub przerwać pętlę równoległą, aby wszystkie wątki były poinformowane o akcji.Describes how to stop or break from a parallel loop so that all threads are informed of the action.
Instrukcje: zapisywanie pętli Parallel.For ze zmiennymi lokalnymi wątkuHow to: Write a Parallel.For Loop with Thread-Local Variables Opisuje, jak napisać pętlę For, w której każdy wątek utrzymuje zmienną prywatną, która nie jest widoczna dla żadnych innych wątków i jak synchronizować wyniki ze wszystkich wątków po zakończeniu pętli.Describes how to write a For loop in which each thread maintains a private variable that is not visible to any other threads, and how to synchronize the results from all threads when the loop completes.
Instrukcje: zapisywanie pętli Parallel.ForEach ze zmiennymi lokalnymi partycjiHow to: Write a Parallel.ForEach Loop with Partition-Local Variables Opisuje, jak napisać pętlę ForEach, w której każdy wątek utrzymuje zmienną prywatną, która nie jest widoczna dla żadnych innych wątków i jak synchronizować wyniki ze wszystkich wątków po zakończeniu pętli.Describes how to write a ForEach loop in which each thread maintains a private variable that is not visible to any other threads, and how to synchronize the results from all threads when the loop completes.
Instrukcje: anulowanie pętli Parallel.For lub ForEachHow to: Cancel a Parallel.For or ForEach Loop Opisuje sposób anulowania pętli równoległej przy użyciu System.Threading.CancellationTokenDescribes how to cancel a parallel loop by using a System.Threading.CancellationToken
Instrukcje: przyspieszanie małych jednostek pętliHow to: Speed Up Small Loop Bodies Opisuje jeden ze sposobów przyspieszenia wykonywania, gdy treść pętli jest bardzo mała.Describes one way to speed up execution when a loop body is very small.
Biblioteka zadań równoległych (TPL)Task Parallel Library (TPL) Zawiera omówienie biblioteki zadań równoległych.Provides an overview of the Task Parallel Library.
Programowanie równoległeParallel Programming Wprowadza programowanie równoległe w .NET Framework.Introduces Parallel Programming in the .NET Framework.

Zobacz takżeSee also