Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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).
Tematy pokrewne
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. |