Datenparallelität (Task Parallel Library)

Datenparallelismus verweist auf Szenarien, in denen der gleiche Vorgang gleichzeitig (d. h. parallel) für Elemente in einer Quellauflistung oder einem Array ausgeführt wird. Datenparallelismus mit imperativer Syntax wird von mehreren Überladungen von der For-Methode und der ForEach-Methode in der System.Threading.Tasks.Parallel-Klasse unterstützt. In parallelen Datenvorgängen wird die Quellauflistung partitioniert, sodass mehrere Threads gleichzeitig auf verschiedene Segmente angewendet werden können. TPL unterstützt Datenparallelität durch die System.Threading.Tasks.Parallel-Klasse. Diese Klasse stellt methodenbasierte parallele Implementierungen von for-Schleifen und foreach-Schleifen bereit (For und For Each in Visual Basic). Sie schreiben die Schleifenlogik für eine Parallel.For-Schleife oder Parallel.ForEach-Schleife weitgehend auf die gleiche Weise wie eine sequenzielle Schleife. Sie müssen keine Threads erstellen oder Arbeitsaufgaben in die Warteschlange einreihen. In grundlegenden Schleifen sind keine Sperren erforderlich. Die TPL übernimmt alle Arbeiten auf niedriger Ebene für Sie. Im folgenden Codebeispiel werden eine einfache foreach-Schleife und deren parallele Entsprechung dargestellt.

HinweisHinweis

Diese Dokumentation definiert Delegaten in TPL mithilfe von Lambda-Ausdrücken.Wenn Sie in C# oder Visual Basic nicht mit Lambda-Ausdrücken vertraut sind, finden Sie unter Lambda-Ausdrücke in PLINQ und TPL entsprechende Informationen.

' Sequential version        
For Each item In sourceCollection
    Process(item)
Next

' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
// Sequential version            
foreach (var item in sourceCollection)
{
    Process(item);
}

// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));

Wenn eine parallele Schleife ausgeführt wird, partitioniert die TPL die Datenquelle, sodass die Schleife mehrere Teile gleichzeitig bearbeiten kann. Im Hintergrund partitioniert der Taskplaner die Aufgabe basierend auf den Systemressourcen und der Arbeitsauslastung. Nach Möglichkeit verteilt der Planer die Arbeit auf mehrere Threads und Prozessoren, wenn die Arbeitsauslastung unausgewogen ist.

HinweisHinweis

Sie können auch einen eigenen, benutzerdefinierten Partitionierer oder Planer angeben.Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Taskplaner.

Sowohl die Parallel.For-Methode als auch die Parallel.ForEach-Methode verfügen über mehrere Überladungen, die es Ihnen ermöglichen, die Schleifenausführung anzuhalten bzw. zu unterbrechen, den Zustand der Schleife in anderen Threads zu überwachen, den lokalen Threadzustand beizubehalten, lokale Threadobjekte abzuschließen, den Grad der Parallelität zu steuern usw. Zu den Hilfstypen, die diese Funktionalität ermöglichen, zählen ParallelLoopState, ParallelOptions und ParallelLoopResult, CancellationToken und CancellationTokenSource.

Weitere Informationen finden Sie unter Datenparallelität (Task Parallel Library).

Datenparallelismus mit deklarativer oder abfrageähnlicher Syntax wird von PLINQ unterstützt. Weitere Informationen finden Sie unter Paralleles LINQ (PLINQ).

Verwandte Themen

Titel

Beschreibung

Gewusst wie: Schreiben einer einfachen Parallel.For-Schleife

Beschreibt, wie eine For-Schleife über jedes Array oder indizierbare IEnumerable<T>-Quellauflistung geschrieben wird.

Gewusst wie: Schreiben einer einfachen Parallel.ForEach-Schleife

Beschreibt, wie eine ForEach-Schleife über jede IEnumerable<T>-Quellauflistung geschrieben wird.

Gewusst wie: Beenden oder Verlassen einer Parallel.For-Schleife

Beschreibt, wie eine parallele Schleife beendet oder unterbrochen wird, damit alle Threads von der Aktion informiert werden.

Gewusst wie: Schreiben einer Parallel.For-Schleife mit lokalen Threadvariablen

Beschreibt, wie eine For-Schleife geschrieben wird, in der jeder Thread eine private Variable beibehält, die für alle anderen Threads nicht sichtbar ist, und wie die Ergebnisse von allen Threads synchronisiert werden, wenn die Schleife abgeschlossen wird.

Gewusst wie: Schreiben einer Parallel.ForEach-Schleife mit lokalen Threadvariablen

Beschreibt, wie eine ForEach-Schleife geschrieben wird, in der jeder Thread eine private Variable beibehält, die für alle anderen Threads nicht sichtbar ist, und wie die Ergebnisse von allen Threads synchronisiert werden, wenn die Schleife abgeschlossen wird.

Gewusst wie: Abbrechen einer Parallel.For-Schleife oder einer ForEach-Schleife

Beschreibt, wie eine parallele Schleife mit einem System.Threading.CancellationToken-Objekt abgebrochen wird

Gewusst wie: Beschleunigen von kurzen Schleifenkörpern

Beschreibt eine Möglichkeit zur Beschleunigung der Ausführung, wenn ein Schleifenkörper sehr klein ist.

Task Parallel Library

Übersicht über die Task Parallel Library.

Parallele Programmierung in .NET Framework

Einführung in parallele Programmierung in .NET Framework

Siehe auch

Konzepte

Parallele Programmierung in .NET Framework