Równoległość danych (Biblioteka zadań równoległych)
Równoległość danych odnosi się do scenariuszy, w których ta sama operacja jest wykonywana współbieżnie (czyli równolegle) na elementach w kolekcji źródłowej lub tablicy. W operacjach równoległych danych kolekcja źródłowa jest partycjonowana, aby wiele wątków mogło działać jednocześnie na różnych segmentach.
Biblioteka równoległa zadań (TPL) obsługuje równoległość danych za pośrednictwem System.Threading.Tasks.Parallel klasy . Ta klasa zawiera oparte na metodach równoległe implementacje pętli for i foreach (For
i For Each
w Visual Basic). Tworzysz logikę pętli dla Parallel.For pętli lub Parallel.ForEach tak samo jak w przypadku pisania pętli sekwencyjnej. Nie trzeba tworzyć wątków ani kolejek elementów roboczych. W podstawowych pętlach nie trzeba przyjmować blokad. TPL obsługuje całą pracę niskiego poziomu dla Ciebie. Aby uzyskać szczegółowe informacje na temat korzystania z Parallel.For programów i Parallel.ForEach, pobierz dokument Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4 (Wzorce dla programowania równoległego: opis i stosowanie wzorców równoległych za pomocą programu .NET Framework 4). Poniższy przykład kodu przedstawia prostą foreach
pętlę i jej odpowiednik równoległy.
Uwaga
Ta dokumentacja używa wyrażeń lambda do definiowania delegatów w TPL. Jeśli nie znasz wyrażeń lambda w języku C# lub Visual Basic, zobacz Wyrażenia lambda w plINQ i 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))
Gdy jest uruchamiana pętla równoległa, TPL dzieli źródło danych tak, aby pętla mogła działać na wielu częściach jednocześnie. W tle harmonogram zadań dzieli zadanie na partycje na podstawie zasobów systemowych i obciążenia. Jeśli to możliwe, harmonogram redystrybuuje pracę między wieloma wątkami i procesorami, jeśli obciążenie stanie się niezrównoważone.
Uwaga
Możesz również podać własny niestandardowy moduł partycjonowania lub harmonogram. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL and Task Schedulers (Niestandardowe partycjonatory dla plINQ i TPL) i Task Schedulers (Harmonogramy zadań).
Parallel.For Obie metody 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, utrzymywanie stanu wątku lokalnego, finalizowanie obiektów lokalnych wątków, kontrolowanie stopnia współbieżności itd. Typy pomocnika, które włączają tę funkcję, obejmują ParallelLoopState, , ParallelOptions, ParallelLoopResultCancellationToken, i CancellationTokenSource.
Aby uzyskać więcej informacji, zobacz Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4 (Wzorce programowania równoległego: opis i stosowanie wzorców równoległych za pomocą programu .NET Framework 4).
Równoległość danych z deklaratywną lub podobną do zapytania składnią jest obsługiwana przez PLINQ. Aby uzyskać więcej informacji, zobacz Parallel LINQ (PLINQ).
Tematy pokrewne
Nazwa | opis |
---|---|
Instrukcje: zapisywanie prostej pętli Parallel.For | Opisuje sposób pisania For pętli dla dowolnej tablicy lub kolekcji źródłowej z możliwością indeksowania IEnumerable<T> . |
Instrukcje: zapisywanie prostej pętli Parallel.ForEach | Opisuje sposób pisania ForEach pętli w dowolnej IEnumerable<T> kolekcji źródłowej. |
Instrukcje: zatrzymywanie lub przerywanie z pętli Parallel.For | Opisuje, jak zatrzymać lub przerwać pętlę równoległą, aby wszystkie wątki zostały poinformowane o akcji. |
Instrukcje: zapisywanie pętli Parallel.For ze zmiennymi lokalnymi wątku | Opisuje sposób pisania For pętli, w której każdy wątek utrzymuje zmienną prywatną, która nie jest widoczna dla innych wątków i jak synchronizować wyniki ze wszystkich wątków po zakończeniu pętli. |
Instrukcje: zapisywanie pętli Parallel.ForEach ze zmiennymi lokalnymi partycji | Opisuje sposób pisania ForEach pętli, w której każdy wątek utrzymuje zmienną prywatną, która nie jest widoczna dla innych wątków i jak synchronizować wyniki ze wszystkich wątków po zakończeniu pętli. |
Instrukcje: anulowanie pętli Parallel.For lub ForEach | Opisuje sposób anulowania pętli równoległej przy użyciu elementu System.Threading.CancellationToken |
Instrukcje: przyspieszanie małych jednostek pętli | Opisuje jeden ze sposobów przyspieszenia wykonywania, gdy treść pętli jest bardzo mała. |
Biblioteka zadań równoległych (TPL) | Zawiera omówienie biblioteki równoległej zadań. |
Programowanie równoległe | Wprowadza programowanie równoległe w programie .NET Framework. |