Parallele Erweiterungen
Parallele Erweiterungen war der Entwicklungsname für a gelang es Parallelität Bibliothek entwickelt durch eine Zusammenarbeit zwischen Microsoft Research und die CLR Team bei Microsoft. Die Bibliothek wurde in Version 4.0 der veröffentlicht .NET Framework.[1] Es besteht aus zwei Teilen: Parallel Linq (Plinq) und Aufgabe Parallele Bibliothek (TPL).[2][3] Es besteht auch aus einer Reihe von Koordinationsdatenstrukturen (CDS) - Sätze von Datenstrukturen Wird verwendet, um die Ausführung von gleichzeitigen Aufgaben zu synchronisieren und zu koordinieren.[4]
Parallel Linq
Plinq, oder Parallel LinqParallelisierung der Ausführung von Abfragen auf Objekten (linq zu Objekten) und XML -Daten (linq bis xml). Plinq ist für die Exposition bestimmt Datenparallelität durch Verwendung von Abfragen.[2] Alle Berechnungen zu Objekten, die als Abfragen implementiert wurden, können durch Plinq parallelisiert werden. Die Objekte müssen jedoch die implementieren IParallelEnumerable
Schnittstelle, die durch Plinq selbst definiert wird. Intern wird es verwendet Tpl Für die Ausführung.[4][5]
Aufgabe Parallele Bibliothek
Das Aufgabe Parallele Bibliothek (Tpl) ist der Aufgabe Parallelität Komponente der parallelen Erweiterungen zu .NET.[6] Es enthüllt parallele Konstrukte wie parallele Zum
und Für jeden
Schleifen, verwenden regelmäßige Methodenaufrufe und Delegierteso können die Konstrukte von jedem verwendet werden CLI -Sprachen. Die Aufgabe des Laichen und Kündigung Themen, und das Skalieren der Anzahl der Threads entsprechend der Anzahl der verfügbaren Prozessoren wird von der Bibliothek selbst durchgeführt.[3] Verwendung einer Arbeit stehlen Planer.[7]
TPL enthält auch andere Konstrukte wie Aufgabe und Zukunft. EIN Aufgabe ist eine Aktion, die unabhängig vom Rest des Programms ausgeführt werden kann. In diesem Sinne entspricht es semantisch einem Thread, außer dass es ein leichteres Objekt ist und ohne den Overhead des Erstellens eines OS-Threads kommt. Aufgaben werden von a in der Warteschlange Taskmanager Objekt und sollen auf mehreren OS -Threads in a ausgeführt werden Fadenpool Wenn sie an der Reihe kommen.
Zukunft ist eine Aufgabe, die ein Ergebnis zurückgibt. Das Ergebnis wird in einem Hintergrund -Thread berechnet, der von dem eingekapselt ist Zukunft Objekt, und das Ergebnis wird gepuffert, bis es abgerufen wird.[3] Wenn ein Versuch unternommen wird, das Ergebnis vor seiner Berechnung abzurufen, blockiert der anspruchsvolle Thread, bis das Ergebnis verfügbar ist.[6]
Das andere Konstrukt von TPL ist Parallel Klasse. TPL liefert eine grundlegende Form der strukturierten Parallelität über drei statische Methoden in der Parallelklasse:
- Parallel.invoke
- Führt eine Reihe von Aktionsdelegierten parallel aus und wartet dann darauf, dass sie abgeschlossen sind
- Parallel.for
- Parallele Äquivalent eines C# für Schleife
- Parallel.foreach
- Parallele Äquivalent eines C# Foreach Loop
Die Architektur
Das Hauptkonzept in den parallelen Erweiterungen zu .NET ist a Aufgabe
, was eine kleine Codeeinheit ist, die normalerweise als als dargestellt wird Lambda -Funktion, das kann unabhängig ausgeführt werden. Sowohl Plinq als auch die TPL -API bieten Methoden zum Erstellen der Aufgaben - plinq unterteilt eine Abfrage in kleinere Aufgaben und die Parallel.for
, Parallel.foreach
und Parallel.invoke
Methoden teilen eine Schleife in Aufgaben.
PFX enthält a Taskmanager
Objekt, das die Aufgaben für die Ausführung plant. Ein Task -Manager enthält eine globale Warteschlange von Aufgaben, die dann ausgeführt werden. Es verkauft auch mehrere Themen auf die die Aufgaben ausgeführt werden. Standardmäßig werden so viele Threads wie Prozessoren (oder Prozessorkerne) im System erstellt, obwohl diese Zahl manuell geändert werden kann. Jeder Thread ist einer threadspezifischen Warteschlange von Aufgaben zugeordnet. Im Leerlauf nimmt jeder Thread eine Reihe von Aufgaben auf und legt sie in seine lokale Warteschlange, wo sie dann nacheinander ausgeführt werden. Wenn die globale Warteschlange leer ist, sucht ein Thread nach Aufgaben in den Warteschlangen ihrer Kollegen und übernimmt die Aufgaben, die in der Warteschlange am längsten waren (am längsten (Aufgabe Diebstahl). Bei der Ausführung werden die Aufgaben unabhängig von der Änderung des Zustands einer von anderen unabhängigen Aufgabe ausgeführt. Wenn sie eine gemeinsame Ressource verwenden, müssen sie daher immer noch manuell mit Schlösser oder anderen Konstrukten synchronisiert werden.
Siehe auch
- Parallelitäts- und Koordinationslaufzeit
- Schließt sich an
- Cilk/Cilk Plus - Vergleichbare Technologie für C und C ++
- Grand Central Dispatch - vergleichbare Technologie in Mac OS X 10.6 entwickelt von Apfel.
- Java Parallelität - vergleichbare Technologie in Java (auch bekannt als JSR 166).
- Fadenbausteine (TBB) - Vergleichbare Technologie für C ++ verfügbar für viele Systeme, die ursprünglich von Intel erstellt wurden (auch Open Source)
- Fadenpoolmuster
- Aufgabe Parallelität
- Reactivex (Reaktive Erweiterungen)
Verweise
- ^ "Was ist neu im .NET Framework 4". Abgerufen 21. September 2011.
- ^ a b "Programmierung im Alter der Parallelität: gleichzeitige Programmierung mit PFX". Abgerufen 16. Oktober 2007.
- ^ a b c "MSDN Magazine: Aufgabe Parallele Bibliothek". Archiviert von das Original am 14. Oktober 2007. Abgerufen 16. Oktober 2007.
- ^ a b "Juni 2008 CTP - Parallele Erweiterungen zum .NET FX". Abgerufen 6. August 2008.
- ^ "Leistungsfähigere Aggregationen in Plinq". Abgerufen 6. August 2008.
- ^ a b Duffy, Joe (2009). Gleichzeitige Programmierung unter Windows. S. "887–929". ISBN 978-0321434821.
- ^ Leijen, Daan; Schulte, Wolfram; Burckhardt, Sebastian (2009). "Das Design einer Aufgabe parallel Bibliothek". ACM Sigplan nennt. 44 (10): 227. Citeseerx 10.1.1.146.4197. doi:10.1145/1639949.1640106.