Udostępnij za pośrednictwem


Równoległość danych (biblioteka równoległa zadań)

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ę dla pętli Parallel.For lub Parallel.ForEach podobnie jak dla pętli sekwencyjnej. Nie trzeba tworzyć wątków ani kolejek elementów roboczych. W podstawowych pętlach nie trzeba stosować blokad. TPL obsługuje całą niskopoziomową pracę za Ciebie. Aby uzyskać szczegółowe informacje na temat korzystania z Parallel.For i Parallel.ForEach, pobierz dokument Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4. Poniższy przykład kodu przedstawia prostą foreach pętlę i jej odpowiednik równoległy.

Uwaga / Notatka

Ta dokumentacja używa wyrażeń lambda do definiowania delegatów w języku 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 / Notatka

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ń).

Obie metody Parallel.For i Parallel.ForEach mają kilka przeciążeń, które umożliwiają zatrzymanie lub przerwanie wykonywania pętli, monitorowanie stanu pętli na innych wątkach, utrzymywanie stanu lokalnego wątku, finalizowanie lokalnych obiektów wątkowych, 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).

Nazwa Opis
Instrukcje: pisanie prostej pętli Parallel.For Opisuje, jak napisać For pętlę dla dowolnej tablicy lub indeksowalnej kolekcji źródłowej IEnumerable<T>.
Instrukcje: pisanie prostej pętli Parallel.ForEach Opisuje sposób pisania ForEach pętli w dowolnej IEnumerable<T> kolekcji źródłowej.
Jak: Zatrzymać lub przerwać pętlę 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 za pomocą zmiennych Thread-Local 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 za pomocą zmiennych Partition-Local 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 ciał pętli Opisuje jeden ze sposobów przyspieszenia wykonywania, gdy ciało pętli jest bardzo małe.
Biblioteka zadań równoległych (TPL) Zawiera przegląd Task Parallel Library.
Programowanie równoległe Wprowadza programowanie równoległe w programie .NET Framework.

Zobacz także

  • Programowanie równoległe