multithreading in c# mit tpl
TRANSCRIPT
Multithreading mit C#Mit Visual Studio 2010 und .NET 4.0
About me…
B. Eng. David Tielke Freiberuflicher Trainer Microsoft Student Partner
Blog: www.David-Tielke.de Mail: [email protected] Twitter: DavidTielke
Agenda
1. Prozessoren2. Was sind Prozesse und Threads?3. Multithreading unter .NET4. Synchronisation5. Task Parallel Library 6. Zusammenfassung
Prozessoren
Prozesse
Process N
Process Control Block
UserAddressSpace
UserStack
Enthält Informationen über den Prozess• Identifier• Usertoken• PSW• Register• Stackpointer•…
Daten des Prozesses(Heap)
„Lokale“ Daten• Parameter• Rücksprungadressen•…
Das Problem - Viele Prozesse nur ein CPU
Das Zeitscheibenmodell – Single CPU
Das Zeitscheibenmodell – Multicore CPU
Datenbank
Prozess A
Parallelität in einem Prozess? (1)
1. Parallelität in einem Prozess? (2)
Process N
Process Control Block
UserAddressSpace
Thread 1
Thread Control Block
Stack
Thread 2
Thread Control Block
Stack
Thread n
Thread Control Block
Stack
…
Parallelität in einem Prozess? (2)
Thread 1
Thread 2
Thread
3
Thread 1
Thre
ad 1
Thread 1
Thread 1
Thread 2
Multithreading unter .NET
Der Namespace System.Threading
Die Klasse Thread
Hauptklasse für Multithreading in .NET Bietet Operationen um
• Threads zu starten / abzubrechen• Threads zu pausieren / reaktivieren• Threads warten zu lassen• Atomare Operationen durchzuführen
Bietet Eigenschaften um• Kontext-Informationen zu erhalten• Status-Informationen zu erhalten• Prioritäten zu verändern• Status zu ändern
Die Klasse ThreadPool
Das erstellen von Threads ist sehr aufwändig Es muss gemacht werden
• Kontexte vom Basisthread übernehmen• Ressourcen im Kernel allokieren• Thread-Kontrollstrukturen (TCB) erstellen• Kontexte vom Basisthread übernehmen• Auf Scheduling warten• Resourcen wieder freigeben• …
Für Operationen die schnell ausgeführt werden müssen, eignet sich die Klasse Thread nur bedingt!
Die Klasse ThreadPool
Ein weiteres Problem: Thrashing• Erstellen von sehr vielen Threads gleichzeitig• ALLE Threads starten (mehr oder weniger) parallel• ALLE Threads fügen sich in die Ready-Queue ein Der CPU wird zu 100% ausgelastet, das System reagiert
träge Lösung mit dem Threadpool
Delegate Queue
Worker() Worker()…Worker()
Freie Threads
Arbeitende ThreadsSch
edule
r Thread x Thread y Thread z
Thread n
Die Klasse ThreadPool
Klasse ist statisch Anzahl minimaler und maximaler
Threads ist einstellbar Anwendung ist einfach:
• Methode(object) erstellen• Delegaten für die Methode erstellen• Delegaten an ThreadPool übergeben• Thats it…
Die Klasse ThreadPool
Die Klasse Threadpool ist statisch, d.h.:• Es existiert NUR EINE pro Domäne• Jedes Programm hat eine eigene Sehr hohe Sicherheit
Anwendung von Threadpool muss mit Vorsicht geschehen, auch das APM greift auf dem ThreadPool zu.
Die Klasse Thread und Threadpool
n
DEMO1_Threads_and_Threadpool
Synchronisierung
Synchronisierung (Beispiel 1)
Immer wenn 2 Objekte eine gemeinsame Ressource nutzen, kommt es zu Konflikten
Um diese Konflikte zu vermeiden, müssen gemeinsame Ressourcen synchronisiert werden.
Sehr Fehleranfällig (Deadlocks)
Synchronisierung (Beispiel 2)Thread 1 Thread 2
Werte:• X = 0• Y = 0
1015
Ausgabe:
New Point at 15/5
515
New Point at 15/15
Solche Fehler heißen Heisenbugs, der Albtraum aller Entwickler!!!
Synchronisierung (Beispiel 4)
n
DEMO2_Synchronizing
Task Parallel Library
Task Parallel Library
Parallel Extensions• TPL• Structures for Parallel Programming• Parallel LINQ
Führt Task als Abstrahierung von Thread ein Automatisiert viele Vorgänge Wesentlich einfacher!!!
Task Parallel Library
n
DEMO3_TPL
5. Zusammenfassung
Prozessorgeschwindigkeit stagniert Multicoreprozessoren Anpassung unserer Programme Threads Threadpool Synchronisation Tasks Parallel-Klasse
Fragen & Antworten
Vielen Dank für Ihre Aufmerksamkeit!