: Marc André Zhou
: Parallel Computing in .NET Multicore-Programmierung von .NET 2.0 bis 4.0
: entwickler.press
: 9783868022599
: 1
: CHF 17.00
:
: Programmiersprachen
: German
: 478
: kein Kopierschutz/DRM
: PC/MAC/eReader/Tablet
: PDF
In der Vergangenheit konnten Anwendungen automatisch von neueren Prozessoren mit höheren Taktfrequenzen profitieren. Diese Gesetzmäßigkeit wird sich in der Zukunft nicht mehr fortsetzen. Die Leistungsfähigkeit moderner Prozessoren steigert sich heute in der Regel durch den gleichzeitigen Einsatz mehrerer CPU-Kerne. Da Anwendungsentwickler nicht mehr darauf bauen können, dass eine sequentiell implementierte Anwendung auf einer neueren CPU-Generation schneller ausgeführt wird, müssen die Möglichkeiten der Multicore-Technologie gezielt genutzt werden. Der Schlüssel dazu lautet 'Parallel Computing'. Das Buch 'Parallel Computing unter .NET' liefert das dazu nötige Wissen. Außer den wichtigsten theoretischen Grundlagen werden die Möglichkeiten des .NET Frameworks (inklusive der Neuerungen in .NET 4.0) bei der Programmierung von Multicore-Anwendungen dargestellt. Dabei werden u. a. folgende Themenfelder behandelt: Theoretische Konzepte und Gesetzmäßigkeiten Domain- und Functional-Decomposition Auswirkungen auf das Projektmanagement Passive und Aktive Klassen Speichermodelle Konzepte zur Deadlock-Vermeidung Fehlerbehandlung Threads unter .NET Synchronisierungskonzepte ThreadPools Task Parallel Library (TPL) und PLINQ Neue Debugging-Möglichkeiten in Visual Studio 2010 Die Neuauflage des Buches wurde auf die finale API der .NET Version 4.0 angepasst. Ein zusätzliches Kapitel beschreibt die erweiterten Möglichkeiten der Task Parallel Library, wie z. B. der Realisierung eines eigenen Task Schedulers. Ein weiteres neues Kapitel geht auf das Zusammenspiel zwischen der Task Parallel Library und der neuen Async.-Bibliothek ein.

Marc André Zhou ist Dipl. Inf. (FH) und erwarb zusätzlich den Titel Master of Science (M. Sc.). Er entwirft und entwickelt seit über 10 Jahren Software für unterschiedliche Branchen. Er ist als freiberuflicher Technologieberater hauptsächlich als Entwickler, Architekt und (Entwickler-) Coach tätig. Sein Schwerpunkt ist die Realisierung von Anwendungen auf Basis der Microsoft .NET Plattform und SharePoint. Neben diesen Tätigkeiten ist er regelmäßiger Autor des dot.net-Magazins und Speaker auf der BASTA! Mehr Infos über Marc André Zhou sowie seinen Blog finden Sie unter www.dev-sky.net
11 Programmiermodelle(S. 423-424)

Bisher wurden in diesem Buch Möglichkeiten vorgestellt, wie man unter .NET Parallel Computing betreiben kann. Bis zu der Version 3.5 SP1 (Service Pack1) des .NET Frameworks standen nur rudimentäre, Thread-basierte Möglichkeiten zur Verfügung. Eine Alternative besteht in der Nutzung der Concurrency and Coordination Runtime (CCR), die in Kapitel 9 vorgestellt wurde. Diese ist aber eher auf die optimale Ausführung von Prozessen hin optimiert und erfordert eine geeignete Anwendungsarchitektur.

Mit dem .NET Framework 4.0 wurde mit der Task Parallel Library (TPL) und PLINQ erstmals eine Verbesserung in Hinblick auf Parallel Computing eingeführt. PLINQ ermöglicht es auf einfache Art und Weise, vorhandene LINQ-Abfragen zu parallelisieren. Die TPL führt mit dem Task-Konzept verbesserte Möglichkeiten ein, um Aufgaben effektiver und einfacher parallel ausführen zu können. Die Task-Klasse enthält viele Funktionen, die bei der Thread-Klasse oft vergeblich gesucht wurden.

Die neue Concurrent Runtimeübernimmt im Hintergrund die optimale Ausnutzung und Belegung vorhandener Systemressourcen. Auch wenn die neuen Parallel Extensions unter .NET 4.0 viele Erleichterungen bringen, werden noch nicht alle typischen Probleme gelöst. Typische Seiteneffekte, wie der Zugriff auf gemeinsame Variablen durch mehrere Tasks, müssen auch unter .NET 4.0 beachtet werden. Dazu müssen weiterhin Sperren (Locks) verwendet werden, die bei falscher Verwendung auch unter .NET 4.0 zu Deadlocks führen können.

Leider werden sich diese Probleme auch nur schwer„automatisch“ durch neue APIs innerhalb des .NET Frameworks lösen lassen. An dieser Stelle mussüber andere veränderte Programmiermodelle nachgedacht werden. Dazu gibt es auch schon bei Microsoft einigeÜberlegungen. Zwei davon werden in diesem Kapitel vorgestellt. Neben dem Einsatz von Parallel Computing reicht es aber auch teilweise aus, auf ein asynchrones Ausführungsmodell zurückzugreifen, das im letzten Abschnitt thematisiert wird.
Inhaltsverzeichnis5
1 Einleitung15
1.1 Für wen ist dieses Buch?15
1.2 Ziele des Buchs16
1.3 Parallel Computing: Warum?17
1.3.1 CPU: Umkehrung der Entwicklung18
1.3.2 Multi-core-Prozessoren21
1.3.3 Nutzung von Multi-core-Prozessoren21
1.4 Grundlagen23
1.4.1 Definition: Parallel Computing25
1.4.2 Rechnerarchitekturen26
1.4.3 Multithreading vs. Parallel Computing31
1.4.4 Asynchrone Programmierung vs. Parallel Computing32
1.4.5 Arbeitsweise33
1.4.6 Parallele Programmiermodelle33
1.4.7 Einteilung nach Flynn37
1.5 Performanceindikatoren und Gesetzmäßigkeiten38
1.5.1 Speedup39
1.5.2 Effizienz41
1.5.3 Amdahlsches Gesetz42
1.5.4 Gustafson-Gesetz45
1.5.5 Mehraufwand (Parallel Overhead)45
1.5.6 Kritische Bereiche (Load Imbalance)47
1.5.7 Slowdown-Effekt48
1.5.8 Weitere wichtige Begriffe48
1.6 Granularität50
1.6.1 Fine-grain Parallelism51
1.6.2 Coarse-grain Parallelism51
2 Allgemeine Konzepte53
2.1 Regeln für erfolgreiches Parallel Computing53
2.1.1 Arbeitsverteilung55
2.1.2 Zustandsverwaltung (Shared State)60
2.1.3 Selbstblockade (Deadlock)64
2.1.4 Starvation69
2.1.5 Fehlerbehandlung69
2.2 Projektmanagement und Planung71
2.2.1 Grad der Parallelisierung71
2.2.2 Kostenkalkulation73
2.2.3 Anforderungsdefinition73
2.3 Modellierungsmöglichkeiten74
2.3.1 (Passive) Klassen und aktive Klassen75
2.3.2 Kommunikation77