Sonntag, 9. Dezember 2007

Mehr Paralellität mit PLINQ und TPL

Mit der nächsten Generation für die Parallelverarbeitung mit dem .NET Framework PFX unterstützt Microsoft den Trend der Paralellverarbeitung. Da aktuelle Prozessoren mit immer mehr Kernen ausgestattet sind muss, um die Performancevorteile mehrerer Prozessorkernen auszunutzen, mehr parallel verarbeitet werden.
Das .NET Framework hat das mit dem Threading-Model und dem ThreadPool schon angenehm einfach gemacht. Aber nicht einfach genug! Mehr Abstraktion muss her. Bestechende Ansätze Microsofts sind dabei PLINQ und die Task Paralell Library. So einfach war Paralellverarbeitung noch nie:

Ein kleines Beispiel eines ersten experiments mit der TPL:
Parallel.For(0, 100, delegate(int i) { a[i] = a[i]*a[i]; });

Das ist nicht nur unglaublich einfach, sondern auch noch schneller als mit der ThreadPool-Klasse. Die TPL optimiert und steuert die Arbeitthreads nämlich besser. Ein empfehlenswerter Artikel dazu ist Optimieren von verwaltetem Code für Mehrkerncomputer. Anschauen lohnt sich!

Gleiches gilt für PLINQ:

Abstraktion vom feinsten - PLINQ's AsParallel:
IEnumerable data = ...;var q = data.AsParallel().Where(x => p(x)).Orderby(x => k(x)).Select(x => f(x));foreach (var e in q) a(e);

So gehört sich paralelle Verarbeitung und die Zukunft gehört ihr. Und hier auch noch ein Artikel über das Ausführen von Abfragen auf Mehrkernprozessoren.

Anschauen lohnt sich auf jedenfall. Endlich kann ich mich auf die Problemlösung - die Logik - konzentrieren und muss mich nicht mit technischen Infrastukturdetails herumschlagen. Übrigens lohnt sich im Zusammenhang mit Multithreading auch einen Blick auf Ralfs NSTM Implementation.

Blog des PFX Teams: http://blogs.msdn.com/pfxteam/