Multithreading mit C#Mit Visual Studio 2010 und .NET 4.0<br />
Aboutme…<br />B. Eng. David Tielke<br />Freiberuflicher Trainer<br />Microsoft Student Partner<br />Blog: www.David-Tielke...
Agenda<br />Prozessoren<br />Was sind Prozesse und Threads?<br />Multithreading unter .NET<br />Synchronisation<br />Task ...
Prozessoren<br />
Prozesse<br />Enthält Informationen über den Prozess<br /><ul><li> Identifier
 Usertoken
PSW
 Register
Stackpointer
… </li></ul>Process N<br />ProcessControl Block<br />UserStack<br />„Lokale“ Daten<br /><ul><li>Parameter
 Rücksprungadressen
…</li></ul>UserAddressSpace<br />Daten des Prozesses<br />(Heap)<br />
Das Problem - Viele Prozesse nur einCPU<br />
Das Zeitscheibenmodell – Single CPU<br />
Das Zeitscheibenmodell – Multicore CPU<br />
Datenbank<br />Prozess A<br />Parallelität in einem Prozess? (1)<br />
1. Parallelität in einem Prozess? (2)<br />Process N<br />ProcessControl Block<br />Thread 1<br />Thread n<br />Thread 2<b...
Parallelität in einem Prozess? (2)<br />Thread 2<br />Thread 1<br />Thread 3<br />Thread 1<br />Thread 1<br />Thread 2<br ...
Multithreading unter .NET<br />
Der Namespace System.Threading<br />
Die Klasse Thread<br />Hauptklasse für Multithreading in .NET<br />Bietet Operationen um<br />Threads zu starten / abzubre...
Die Klasse ThreadPool<br />Das erstellen von Threads ist sehr aufwändig<br />Es muss gemacht werden<br />Kontexte vom Basi...
Die Klasse ThreadPool<br />Ein weiteres Problem: Thrashing<br />Erstellen von sehr vielen Threads gleichzeitig<br />ALLE T...
Die Klasse ThreadPool<br />Klasse ist statisch<br />Anzahl minimaler und maximaler Threads ist einstellbar<br />Anwendung ...
Die Klasse ThreadPool<br />Die Klasse Threadpool ist statisch, d.h.:<br />Es existiert NUR EINE pro Domäne<br />Jedes Prog...
Die Klasse Thread und Threadpool<br />nDEMO1_Threads_and_Threadpool<br />
Synchronisierung<br />
Synchronisierung (Beispiel 1)<br />Immer wenn 2 Objekte eine gemeinsame Ressource nutzen, kommt es zu Konflikten<br />Um d...
Nächste SlideShare
Wird geladen in …5
×

Multithreading in c# mit tpl

3.262 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie, Business
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
3.262
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
1.841
Aktionen
Geteilt
0
Downloads
19
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Multithreading in c# mit tpl

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

×