Zum Inhalt springen

„Parallel Extensions“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K Komma vor „sondern“, „indem“, „wobei“ etc.
K Kleinkram
Zeile 1: Zeile 1:
[[Datei:DotNet.svg|mini|250px|Wichtige Teile des [[.NET Framework]]s]]
[[Datei:DotNet.svg|mini|250px|Wichtige Teile des [[.NET Framework]]s]]
Bei den '''Parallel Extensions''' (parallele Erweiterungen), auch bekannt als Parallel Framework Extensions (PFX), handelt es sich um eine [[Library|Bibliothek]] zur Unterstützung der [[parallele Programmierung|parallelen Programmierung]] bei Verwendung des [[Managed Code]] des Microsoft [[.NET-Framework]]s. Die Parallel Extensions bestehen grundsätzlich aus zwei Teilen: [[#Parallel LINQ|''Parallel LINQ'']] (PLINQ) und der [[#Task Parallel Library|''Task Parallel Library'']] (TPL).<ref name="channel9">{{cite web | url = http://channel9.msdn.com/Showpost.aspx?postid=347531 | title = Programming in the Age of Concurrency: Concurrent Programming with PFX | accessdate = 2007-10-16}}</ref><ref name="msdnmag">{{cite web | url = http://msdn.microsoft.com/msdnmag/issues/07/10/Futures/default.aspx | title = MSDN Magazine: Task Parallel Library | accessdate = 2007-10-16 | archiveurl = https://web.archive.org/web/20071014104004/http://msdn.microsoft.com/msdnmag/issues/07/10/futures/default.aspx | archivedate = 2007-10-14 | offline = yes | archivebot = 2019-05-06 02:48:05 InternetArchiveBot }}</ref> Die Bibliothek verfügt über verschiedene Datentypen (referenzierte Objekte) und Funktionen zur Verwaltung und Steuerung von parallelen Prozessen während der Laufzeit.<ref name="somajune"/> Die Bibliothek erschien erstmals (als [[Community Technology Preview|CTP]]) am 29. November 2007<ref>{{cite web | url = http://blogs.msdn.com/somasegar/archive/2007/11/29/parallel-extensions-to-the-net-fx-ctp.aspx | title = Parallel Extensions to the .NET FX CTP | accessdate = 2007-11-30}}</ref> und wurde im Dezember 2007 sowie im Juni 2008 aktualisiert.<ref name="somajune"/> Seit der Version 4.0 des .NET-Frameworks sind die Parallel Extensions fester Bestandteil des Frameworks und können in allen .NET-Sprachen verwendet werden.<ref>{{cite web | url = http://blogs.msdn.com/pfxteam/archive/2008/10/10/8994927.aspx | title = Parallel Programming and the .NET Framework 4.0 | accessdate = 2009-01-25}}</ref>
Bei den '''Parallel Extensions''' (parallele Erweiterungen), auch bekannt als Parallel Framework Extensions (PFX), handelt es sich um eine [[Library|Bibliothek]] zur Unterstützung der [[Parallele Programmierung|parallelen Programmierung]] bei Verwendung des [[Managed Code]] des Microsoft [[.NET-Framework]]s. Die Parallel Extensions bestehen grundsätzlich aus zwei Teilen: [[#Parallel LINQ|''Parallel LINQ'']] (PLINQ) und der [[#Task Parallel Library|''Task Parallel Library'']] (TPL).<ref name="channel9">{{Internetquelle |url=http://channel9.msdn.com/Showpost.aspx?postid=347531 |titel=Programming in the Age of Concurrency: Concurrent Programming with PFX |abruf=2007-10-16}}</ref><ref name="msdnmag">{{Internetquelle |url=http://msdn.microsoft.com/msdnmag/issues/07/10/Futures/default.aspx |titel=MSDN Magazine: Task Parallel Library |offline=1 |archiv-url=https://web.archive.org/web/20071020043857/http://msdn.microsoft.com/msdnmag/issues/07/10/futures/default.aspx |archiv-datum=2007-10-14 |abruf=2007-10-16}}</ref> Die Bibliothek verfügt über verschiedene Datentypen (referenzierte Objekte) und Funktionen zur Verwaltung und Steuerung von parallelen Prozessen während der Laufzeit.<ref name="somajune" /> Die Bibliothek erschien erstmals (als [[Community Technology Preview|CTP]]) am 29. November 2007<ref>{{Internetquelle |url=http://blogs.msdn.com/somasegar/archive/2007/11/29/parallel-extensions-to-the-net-fx-ctp.aspx |titel=Parallel Extensions to the .NET FX CTP |abruf=2007-11-30}}</ref> und wurde im Dezember 2007 sowie im Juni 2008 aktualisiert.<ref name="somajune" /> Seit der Version 4.0 des .NET-Frameworks sind die Parallel Extensions fester Bestandteil des Frameworks und können in allen .NET-Sprachen verwendet werden.<ref>{{Internetquelle |url=http://blogs.msdn.com/pfxteam/archive/2008/10/10/8994927.aspx |titel=Parallel Programming and the .NET Framework 4.0 |abruf=2009-01-25}}</ref>


== Parallel LINQ ==
== Parallel LINQ ==
'''Parallel LINQ''' ('''PLINQ''') bietet die Möglichkeit, LINQ-Abfragen parallel auszuführen, sofern es gegenüber einer sequentiellen Abfrage einen Zeitvorteil (SpeedUp) schaffen kann. Dabei werden entweder mehrere [[LINQ]]-Abfragen parallel aufgerufen oder die Datenmenge selbst parallel zusammengetragen. Das Ziel von PLINQ dabei ist, die Rechenzeit für die Abfragen zu minimieren. In der Regel funktioniert die Parallelisierung mit allen Abfragearten. PLINQ kann über das Interface IParallelEnumerable verwendet werden. Intern verwendet PLINQ die [[#Task Parallel Library|TPL]] für die Parallelisierung.<ref name="somajune">{{cite web | url = http://blogs.msdn.com/somasegar/archive/2008/06/02/june-2008-ctp-parallel-extensions-to-the-net-fx.aspx | title = June 2008 CTP - Parallel Extensions to the .NET FX | accessdate = 2008-08-06}}</ref><ref>{{cite web | url = http://blogs.msdn.com/pfxteam/archive/2008/06/05/8576194.aspx | title = More powerful aggregations in PLINQ | accessdate = 2008-08-06}}</ref>
'''Parallel LINQ''' ('''PLINQ''') bietet die Möglichkeit, LINQ-Abfragen parallel auszuführen, sofern es gegenüber einer sequentiellen Abfrage einen Zeitvorteil (SpeedUp) schaffen kann. Dabei werden entweder mehrere [[LINQ]]-Abfragen parallel aufgerufen oder die Datenmenge selbst parallel zusammengetragen. Das Ziel von PLINQ dabei ist, die Rechenzeit für die Abfragen zu minimieren. In der Regel funktioniert die Parallelisierung mit allen Abfragearten. PLINQ kann über das Interface IParallelEnumerable verwendet werden. Intern verwendet PLINQ die [[#Task Parallel Library|TPL]] für die Parallelisierung.<ref name="somajune">{{Internetquelle |url=http://blogs.msdn.com/somasegar/archive/2008/06/02/june-2008-ctp-parallel-extensions-to-the-net-fx.aspx |titel=June 2008 CTP - Parallel Extensions to the .NET FX |abruf=2008-08-06}}</ref><ref>{{Internetquelle |url=http://blogs.msdn.com/pfxteam/archive/2008/06/05/8576194.aspx |titel=More powerful aggregations in PLINQ |abruf=2008-08-06}}</ref>


== Task Parallel Library ==
== Task Parallel Library ==
Die '''Task Parallel Library''' ('''TPL''') ist die Kernkomponente für die [[Parallele Programmierung|Parallelisierung]] innerhalb des .NET-Frameworks.<ref name="Concurrent Programming on Windows Appendix B"/> Sie ermöglicht es außerdem, bestimmte Bereiche als ''Task'' oder ''[[Future (Programmierung)|Future]]'' zu maskieren. Ein ''Task'' ist ein Abschnitt, der unabhängig (und somit parallel) vom Rest des Programms ausgeführt werden kann. Die TPL erstellt für dieses einen eigenen Thread, welcher jedoch von der TPL selbst verwaltet wird und somit keinen unnötigen Overhead (wie er sonst benötigt wird) erzeugt. Der Entwickler selbst muss sich weder um die Verwaltung der einzelnen Threads noch um die Anzahl der Prozessorkerne kümmern, da dies vollständig von der TPL verwaltet wird.<ref name="msdnmag"/>
Die '''Task Parallel Library''' ('''TPL''') ist die Kernkomponente für die [[Parallele Programmierung|Parallelisierung]] innerhalb des .NET-Frameworks.<ref name="Concurrent Programming on Windows Appendix B" /> Sie ermöglicht es außerdem, bestimmte Bereiche als ''Task'' oder ''[[Future (Programmierung)|Future]]'' zu maskieren. Ein ''Task'' ist ein Abschnitt, der unabhängig (und somit parallel) vom Rest des Programms ausgeführt werden kann. Die TPL erstellt für dieses einen eigenen Thread, welcher jedoch von der TPL selbst verwaltet wird und somit keinen unnötigen Overhead (wie er sonst benötigt wird) erzeugt. Der Entwickler selbst muss sich weder um die Verwaltung der einzelnen Threads noch um die Anzahl der Prozessorkerne kümmern, da dies vollständig von der TPL verwaltet wird.<ref name="msdnmag" />


Die TPL erkennt mögliche parallel auszuführende Aufgaben (Tasks) mittels bestimmter Code-Abschnitte (z.&nbsp;B. Schleifen wie <code>For</code> oder <code>ForEach</code>). Die TPL kann des Weiteren für andere Tasks erzwungen werden.
Die TPL erkennt mögliche parallel auszuführende Aufgaben (Tasks) mittels bestimmter Code-Abschnitte (z.&nbsp;B. Schleifen wie <code>For</code> oder <code>ForEach</code>). Die TPL kann des Weiteren für andere Tasks erzwungen werden.


Als ''Future'' wird ein Task bezeichnet, der ein Ergebnis zurückliefert, welches in einem parallelen Prozess berechnet wurde. Das Ergebnis wird dann bei Fertigstellung vorgehalten, bis es abgerufen wird.<ref name="msdnmag"/> Sollte das Ergebnis vor Fertigstellung abgefragt werden, wird der anfragende Thread angehalten, bis das Ergebnis berechnet wurde.<ref name="Concurrent Programming on Windows Appendix B">{{cite book | first=Joe | last=Duffy | year=2009 | title=Concurrent Programming on Windows | isbn="032143482X" | pages="887–929" }}</ref>
Als ''Future'' wird ein Task bezeichnet, der ein Ergebnis zurückliefert, welches in einem parallelen Prozess berechnet wurde. Das Ergebnis wird dann bei Fertigstellung vorgehalten, bis es abgerufen wird.<ref name="msdnmag" /> Sollte das Ergebnis vor Fertigstellung abgefragt werden, wird der anfragende Thread angehalten, bis das Ergebnis berechnet wurde.<ref name="Concurrent Programming on Windows Appendix B">{{Literatur |Autor=Joe Duffy |Titel=Concurrent Programming on Windows |Datum=2009 |ISBN=978-0-321-43482-1 |Seiten=887–929}}</ref>


Die TPL kann über die '''Parallel'''-Klasse verwendet werden.
Die TPL kann über die '''Parallel'''-Klasse verwendet werden.
Diese Klasse stellt drei statische Methoden zur Verfügung:
Diese Klasse stellt drei statische Methoden zur Verfügung:
;Parallel.Invoke: Führt (parallel) ein Array von Delegaten aus und wartet, bis sie berechnet wurden.
; Parallel.Invoke: Führt (parallel) ein Array von Delegaten aus und wartet, bis sie berechnet wurden.
;Parallel.For: Entspricht der for-Schleife in C#, jedoch mit paralleler Ausführung.
; Parallel.For: Entspricht der for-Schleife in C#, jedoch mit paralleler Ausführung.
;Parallel.ForEach: Entspricht der foreach-Schleife in C#, jedoch mit paralleler Ausführung.
; Parallel.ForEach: Entspricht der foreach-Schleife in C#, jedoch mit paralleler Ausführung.


=== Dataflow ===
=== Dataflow ===
'''Dataflow'''<ref>{{Internetquelle|url=http://msdn.microsoft.com/en-us/library/hh228603.aspx|titel=Dataflow (Task Parallel Library)|werk=MSDN|hrsg=Microsoft|zugriff=2014-06-01|sprache=en}}</ref><ref>{{Internetquelle|url=http://www.microsoft.com/en-ca/download/details.aspx?id=14782|hrsg=Microsoft|titel=Introduction to TPL Dataflow|zugriff=2014-06-01|sprache=en|format=[[Microsoft Word|Microsoft-Word]]-Dokument}}</ref> ist eine .NET-[[Programmbibliothek|Bibliothek]] auf Basis von TPL mit vordefinierten Blöcken für die [[datenstromorientierte Programmierung]].
'''Dataflow'''<ref>{{Internetquelle |url=http://msdn.microsoft.com/en-us/library/hh228603.aspx |titel=Dataflow (Task Parallel Library) |werk=MSDN |hrsg=Microsoft |sprache=en |abruf=2014-06-01}}</ref><ref>{{Internetquelle |url=http://www.microsoft.com/en-ca/download/details.aspx?id=14782 |titel=Introduction to TPL Dataflow |hrsg=Microsoft |format=[[Microsoft Word|Microsoft-Word]]-Dokument |sprache=en |abruf=2014-06-01}}</ref> ist eine .NET-[[Programmbibliothek|Bibliothek]] auf Basis von TPL mit vordefinierten Blöcken für die [[datenstromorientierte Programmierung]].


== Architektur ==
== Architektur ==
Zeile 25: Zeile 25:


== Siehe auch ==
== Siehe auch ==
*[[Grand Central Dispatch]] – vergleichbare Technologie in [[Mac OS X Snow Leopard]] von [[Apple Inc.|Apple]]
* [[Grand Central Dispatch]] – vergleichbare Technologie in [[Mac OS X Snow Leopard]] von [[Apple Inc.|Apple]]


== Einzelnachweise ==
== Einzelnachweise ==

Version vom 29. Oktober 2022, 21:16 Uhr

Wichtige Teile des .NET Frameworks

Bei den Parallel Extensions (parallele Erweiterungen), auch bekannt als Parallel Framework Extensions (PFX), handelt es sich um eine Bibliothek zur Unterstützung der parallelen Programmierung bei Verwendung des Managed Code des Microsoft .NET-Frameworks. Die Parallel Extensions bestehen grundsätzlich aus zwei Teilen: Parallel LINQ (PLINQ) und der Task Parallel Library (TPL).[1][2] Die Bibliothek verfügt über verschiedene Datentypen (referenzierte Objekte) und Funktionen zur Verwaltung und Steuerung von parallelen Prozessen während der Laufzeit.[3] Die Bibliothek erschien erstmals (als CTP) am 29. November 2007[4] und wurde im Dezember 2007 sowie im Juni 2008 aktualisiert.[3] Seit der Version 4.0 des .NET-Frameworks sind die Parallel Extensions fester Bestandteil des Frameworks und können in allen .NET-Sprachen verwendet werden.[5]

Parallel LINQ

Parallel LINQ (PLINQ) bietet die Möglichkeit, LINQ-Abfragen parallel auszuführen, sofern es gegenüber einer sequentiellen Abfrage einen Zeitvorteil (SpeedUp) schaffen kann. Dabei werden entweder mehrere LINQ-Abfragen parallel aufgerufen oder die Datenmenge selbst parallel zusammengetragen. Das Ziel von PLINQ dabei ist, die Rechenzeit für die Abfragen zu minimieren. In der Regel funktioniert die Parallelisierung mit allen Abfragearten. PLINQ kann über das Interface IParallelEnumerable verwendet werden. Intern verwendet PLINQ die TPL für die Parallelisierung.[3][6]

Task Parallel Library

Die Task Parallel Library (TPL) ist die Kernkomponente für die Parallelisierung innerhalb des .NET-Frameworks.[7] Sie ermöglicht es außerdem, bestimmte Bereiche als Task oder Future zu maskieren. Ein Task ist ein Abschnitt, der unabhängig (und somit parallel) vom Rest des Programms ausgeführt werden kann. Die TPL erstellt für dieses einen eigenen Thread, welcher jedoch von der TPL selbst verwaltet wird und somit keinen unnötigen Overhead (wie er sonst benötigt wird) erzeugt. Der Entwickler selbst muss sich weder um die Verwaltung der einzelnen Threads noch um die Anzahl der Prozessorkerne kümmern, da dies vollständig von der TPL verwaltet wird.[2]

Die TPL erkennt mögliche parallel auszuführende Aufgaben (Tasks) mittels bestimmter Code-Abschnitte (z. B. Schleifen wie For oder ForEach). Die TPL kann des Weiteren für andere Tasks erzwungen werden.

Als Future wird ein Task bezeichnet, der ein Ergebnis zurückliefert, welches in einem parallelen Prozess berechnet wurde. Das Ergebnis wird dann bei Fertigstellung vorgehalten, bis es abgerufen wird.[2] Sollte das Ergebnis vor Fertigstellung abgefragt werden, wird der anfragende Thread angehalten, bis das Ergebnis berechnet wurde.[7]

Die TPL kann über die Parallel-Klasse verwendet werden. Diese Klasse stellt drei statische Methoden zur Verfügung:

Parallel.Invoke
Führt (parallel) ein Array von Delegaten aus und wartet, bis sie berechnet wurden.
Parallel.For
Entspricht der for-Schleife in C#, jedoch mit paralleler Ausführung.
Parallel.ForEach
Entspricht der foreach-Schleife in C#, jedoch mit paralleler Ausführung.

Dataflow

Dataflow[8][9] ist eine .NET-Bibliothek auf Basis von TPL mit vordefinierten Blöcken für die datenstromorientierte Programmierung.

Architektur

Das Konzept der Parallel Extensions in .NET basiert darauf, bestimmte Code-Abschnitte in einen Task einzuteilen. Diese Task repräsentiert eine von anderen Teilen des Programms möglichst unabhängige Aufgabe. Sowohl PLINQ als auch die TPL API stellen Methoden zur Verfügung um entsprechende Tasks zu definieren. PLINQ erstellt automatisiert Tasks aus den Abfragen, während die TPL aus den o. g. Schleifen Tasks generiert.

Siehe auch

Einzelnachweise

  1. Programming in the Age of Concurrency: Concurrent Programming with PFX. Abgerufen am 16. Oktober 2007.
  2. a b c MSDN Magazine: Task Parallel Library. Archiviert vom Original (nicht mehr online verfügbar) am 14. Oktober 2007; abgerufen am 16. Oktober 2007.
  3. a b c June 2008 CTP - Parallel Extensions to the .NET FX. Abgerufen am 6. August 2008.
  4. Parallel Extensions to the .NET FX CTP. Abgerufen am 30. November 2007.
  5. Parallel Programming and the .NET Framework 4.0. Abgerufen am 25. Januar 2009.
  6. More powerful aggregations in PLINQ. Abgerufen am 6. August 2008.
  7. a b Joe Duffy: Concurrent Programming on Windows. 2009, ISBN 978-0-321-43482-1, S. 887–929.
  8. Dataflow (Task Parallel Library). In: MSDN. Microsoft, abgerufen am 1. Juni 2014 (englisch).
  9. Introduction to TPL Dataflow. (Microsoft-Word-Dokument) Microsoft, abgerufen am 1. Juni 2014 (englisch).