Freigeben über


Datenparallelität (Task Parallel Library)

Datenparallelität bezieht sich auf Szenarien, in denen derselbe Vorgang gleichzeitig (d. h. parallel) für Elemente in einer Quellauflistung oder einem Array ausgeführt wird. In Datenparallelvorgängen wird die Quellauflistung partitioniert, sodass mehrere Threads gleichzeitig auf verschiedenen Segmenten ausgeführt werden können.

Die Task Parallel Library (TPL) unterstützt Datenparallelität über die System.Threading.Tasks.Parallel Klasse. Diese Klasse stellt methodenbasierte parallele Implementierungen von for- und foreach-Schleifen (For und For Each in Visual Basic) bereit. Sie schreiben die Schleifenlogik für eine Parallel.For- oder Parallel.ForEach-Schleife so, wie Sie eine sequenzielle Schleife schreiben würden. Sie müssen keine Threads erstellen oder Arbeitselemente in die Warteschlange einreihen. In grundlegenden Schleifen sind keine Sperren erforderlich. Die TPL verarbeitet alle Arbeit auf niedriger Ebene für Sie. Ausführliche Informationen zur Verwendung von Parallel.For und Parallel.ForEach finden Sie, indem Sie das Dokument Patterns for Parallel Programming: Verständnis und Anwendung von Parallelmustern mit dem .NET Framework 4 herunterladen. Das folgende Codebeispiel zeigt eine einfache foreach Schleife und deren parallele Variante.

Hinweis

In dieser Dokumentation werden Lambda-Ausdrücke verwendet, um Stellvertretungen in TPL zu definieren. Wenn Sie mit Lambda-Ausdrücken in C# oder Visual Basic nicht vertraut sind, lesen Sie Lambda-Ausdrücke in PLINQ und 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))

Wenn eine parallele Schleife ausgeführt wird, partitioniert die TPL die Datenquelle, sodass die Schleife mehrere Teile gleichzeitig bearbeiten kann. Hinter den Kulissen partitioniert der Taskplaner den Vorgang basierend auf Systemressourcen und Arbeitsauslastung. Wenn möglich, verteilt der Scheduler die Arbeit auf mehrere Threads und Prozessoren, wenn die Workload unausgewogen wird.

Hinweis

Sie können auch ihren eigenen benutzerdefinierten Partitionierer oder Zeitplaner bereitstellen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Task Schedulers.

Sowohl die Parallel.For- als auch die Parallel.ForEach-Methoden verfügen über mehrere Überladungen, mit denen Sie die Ausführung der Schleife beenden oder unterbrechen können, den Zustand der Schleife in anderen Threads überwachen, den thread-lokalen Zustand bewahren, thread-lokale Objekte abschließen, die Parallelität steuern usw. Die Hilfstypen, die diese Funktionalität aktivieren, umfassen ParallelLoopState, , ParallelOptions, , ParallelLoopResult, CancellationTokenund CancellationTokenSource.

Weitere Informationen finden Sie unter Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4.

Die Datenparallelität mit deklarativer oder abfrageähnlicher Syntax wird von PLINQ unterstützt. Weitere Informationen finden Sie unter Parallel LINQ (PLINQ).For more information, see Parallel LINQ (PLINQ).

Titel BESCHREIBUNG
Vorgehensweise: Schreiben einer einfachen Parallel.For-Schleife Beschreibt, wie eine For-Schleife über jedes Array oder indizierbare IEnumerable<T>-Quellauflistung geschrieben wird.
Vorgehensweise: Schreiben einer einfachen Parallel.ForEach-Schleife Beschreibt, wie eine ForEach-Schleife über jede IEnumerable<T>-Quellauflistung geschrieben wird.
Vorgehensweise: Anhalten oder Pausieren durch eine Parallel.For-Schleife Beschreibt, wie man eine parallele Schleife anhalten oder unterbrechen kann, damit alle Threads über die Aktion informiert werden.
Vorgehensweise: Schreiben einer Parallel.For-Schleife mit threadlokalen Variablen Beschreibt, wie eine For Schleife geschrieben wird, in der jeder Thread eine private Variable verwaltet, die für andere Threads nicht sichtbar ist, und wie die Ergebnisse aller Threads synchronisiert werden, wenn die Schleife abgeschlossen ist.
Vorgehensweise: Eine Parallel.ForEach-Schleife mit Variablen Partition-Local schreiben Beschreibt, wie eine ForEach Schleife geschrieben wird, in der jeder Thread eine private Variable verwaltet, die für andere Threads nicht sichtbar ist, und wie die Ergebnisse aller Threads synchronisiert werden, wenn die Schleife abgeschlossen ist.
Vorgehensweise: So brechen Sie eine Parallel.For- oder ForEach-Schleife ab Beschreibt, wie eine parallele Schleife mit einem System.Threading.CancellationToken-Objekt abgebrochen wird
Vorgehensweise: Beschleunigen von kurzen Schleifenkörpern Beschreibt eine Möglichkeit zur Beschleunigung der Ausführung, wenn ein Schleifenkörper sehr klein ist.
Task Parallel Library (TPL) Bietet eine Übersicht über die Bibliothek für parallele Aufgaben.
parallele Programmierung Führt die parallele Programmierung in .NET Framework ein.

Siehe auch