Parallele Programmierung mit PLINQ und .NET 4.0
Mit Hilfe der bei .NET 4.0 integrierten Task Parallel Library und deren Erweiterungsmethoden lassen sich auch LINQ-Abfragen einfach parallel ausführen. Gerade in diesem Bereich dürfte sich der Umstand, dass eine Abfrage nicht mehr nur auf einem, sondern auf zwei oder mehr Kernen gleichzeitig ausgeführt wird, vorteilhaft auswirken.

» Von , 09.03.2010 15:12.
von Marc André Zhou
Die Abfragesprache Language Integrated Query (LINQ) war eine der wichtigsten Neuerungen bei .NET 3.5. LINQ bietet eine mächtige Abfragesyntax, die direkt in den Quellcode eingegeben wird, und mit der sich beliebige Collections typisiert abfragen lassen. Mit .NET 4.0 wird LINQ um die Möglichkeit erweitert, nahezu jede LINQ-Abfrage auch parallel auszuführen zu können. Die Grundlage ist die PLINQ Execution Engine (Abbildung 1), die auf der ebenfalls mit .NET 4.0 neu eingeführten Task Parallel Library basiert.
PLINQ besteht aus vier Teilen:
1) Query Analysis: Analyse der Abfrage
2) Data Partitionierung: Algorithmen zur Aufteilung der Datenmenge
3) Operator Type: Abfrage-Operatoren
4) Merging: Zusammenführung der Ergebnisse
Das PLINQ-Programmiermodell ist relativ simpel, die Syntax von LINQ bleibt dabei vollständig erhalten. PLINQ basiert wie LINQ auf Erweiterungsmethoden (Extension Methods), die von der IEnumerable-Schnittstelle stammen. PLINQ bringt mit ParallelEnumerable eine neue Schnittstelle mit, welche die bereits vorhandenen LINQ-Erweiterungsmethoden noch einmal erweitert.
Listing 1 veranschaulicht den Umgang mit der AsParallel-Erweiterungsmethode.
Listing 1: Paralleles LINQ mit der AsParallel-Methode
static void ListCustomers()
{
var Customers = GetCustomers();
var Orders = GetOrders();
var result = from customer in Customers.AsParallel()
join order in Orders.AsParallel()
on customer.CustomerID equals order.CustomerID
select customer;
foreach (var item in result)
Console.WriteLine("Customer: {0}", item.CustomerName);
}
Abbildung 1: Die PLINQ Execution Engine führt LINQ-Abfragen parallel aus



KOMMENTARE
KOMMENTAR SCHREIBEN