Parallele Programmierung mit PLINQ und .NET 4.0
» Von , 09.03.2010 15:12.
Kosten-Nutzen-Analyse
Wird eine LINQ-Abfrage durch AsParallel zu einer parallelen Abfrage, bedeutet dies aber nicht zwingend, dass eine parallele Ausführung stattfindet. PLINQ durchläuft vor der Ausführung eine ,,Query Analysis"-Phase. In dieser Phase prüft PLINQ, ob eine parallele Ausführung für die aktuelle Abfrage überhaupt eine verbesserte Laufzeitgeschwindigkeit erzielen würde. Endet diese Prüfung negativ, wird die Abfrage weiterhin sequentiell ausgeführt. Basis der Entscheidung ist nicht, was naheliegend wäre, die Datenmenge, sondern die Struktur der Abfrage. Verwendet die Abfrage z.B. Operatoren wie Take, SkipWhile, Group by, wird die Abfrage mit höherer Wahrscheinlichkeit sequentiell und nicht parallel ausgeführt. Wenn es sein muss, kann PLINQ über die WithExectionMode mit der Einstellung ParallelExecutionMode.ForceParallelism zu einer parallelen Ausführung gezwungen werden.
Ein weiterer wichtiger Punkt, der in diesem Zusammenhang beachtet werden muss, betrifft die Reihenfolge der Ausgabeelemente. Bei einer rein sequentiell ausgeführten LINQ-Abfrage bleibt die Reihenfolge von Ein- und Ausgabeelemente gleich. Das erste Element einer Datenquelle wird als erstes verarbeitet und zurückgegeben. Bei PLINQ findet eine parallele Ausführung statt, daher kann die Reihenfolge, in der die einzelnen Elemente verarbeitet werden, im Vorfeld auch nicht vorhergesagt werden. Mit Hilfe der Methode AsOrdered bleibt die ursprüngliche Reihenfolge der Elemente bei der Ausgabe erhalten. Der Nachteil: Darunter leidet die Verarbeitungsgeschwindigkeit, da die Elemente vor der Ausgabe wieder korrekt eingeordnet werden müssen. Parallele Programmierung bedeutet daher iauch, Kompromisse zu schließen.
Über den Autor
Marc André Zhou ist Dipl. Inf. (FH) und erwarb zusätzlich den Titel Master of Science. Derzeit ist er für die Logica Deutschland GmbH & Co. KG als Senior Consultant tätig.
Weitere Informationen finden Sie auf seinem Blog unter www.sw-consultant.de.



KOMMENTARE
KOMMENTAR SCHREIBEN