Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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).
Verwandte Themen
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. |