Multithreading in c# mit tpl
-
Upload
davidt27 -
Category
Technology
-
view
2.868 -
download
3
Transcript of Multithreading in c# mit tpl
![Page 1: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/1.jpg)
Multithreading mit C#Mit Visual Studio 2010 und .NET 4.0
![Page 2: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/2.jpg)
About me…
B. Eng. David Tielke Freiberuflicher Trainer Microsoft Student Partner
Blog: www.David-Tielke.de Mail: [email protected] Twitter: DavidTielke
![Page 3: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/3.jpg)
Agenda
1. Prozessoren2. Was sind Prozesse und Threads?3. Multithreading unter .NET4. Synchronisation5. Task Parallel Library 6. Zusammenfassung
![Page 4: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/4.jpg)
Prozessoren
![Page 5: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/5.jpg)
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•…
![Page 6: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/6.jpg)
Das Problem - Viele Prozesse nur ein CPU
![Page 7: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/7.jpg)
Das Zeitscheibenmodell – Single CPU
![Page 8: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/8.jpg)
Das Zeitscheibenmodell – Multicore CPU
![Page 9: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/9.jpg)
Datenbank
Prozess A
Parallelität in einem Prozess? (1)
![Page 10: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/10.jpg)
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
…
![Page 11: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/11.jpg)
Parallelität in einem Prozess? (2)
Thread 1
Thread 2
Thread
3
Thread 1
Thre
ad 1
Thread 1
Thread 1
Thread 2
![Page 12: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/12.jpg)
Multithreading unter .NET
![Page 13: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/13.jpg)
Der Namespace System.Threading
![Page 14: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/14.jpg)
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
![Page 15: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/15.jpg)
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!
![Page 16: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/16.jpg)
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
![Page 17: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/17.jpg)
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…
![Page 18: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/18.jpg)
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.
![Page 19: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/19.jpg)
Die Klasse Thread und Threadpool
n
DEMO1_Threads_and_Threadpool
![Page 20: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/20.jpg)
Synchronisierung
![Page 21: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/21.jpg)
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)
![Page 22: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/22.jpg)
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!!!
![Page 23: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/23.jpg)
Synchronisierung (Beispiel 4)
n
DEMO2_Synchronizing
![Page 24: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/24.jpg)
Task Parallel Library
![Page 25: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/25.jpg)
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!!!
![Page 26: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/26.jpg)
Task Parallel Library
n
DEMO3_TPL
![Page 27: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/27.jpg)
5. Zusammenfassung
Prozessorgeschwindigkeit stagniert Multicoreprozessoren Anpassung unserer Programme Threads Threadpool Synchronisation Tasks Parallel-Klasse
![Page 28: Multithreading in c# mit tpl](https://reader033.fdocuments.us/reader033/viewer/2022042518/554f87f7b4c9052a518b4fc0/html5/thumbnails/28.jpg)
Fragen & Antworten
Vielen Dank für Ihre Aufmerksamkeit!