28
Multithreading mit C# Mit Visual Studio 2010 und .NET 4.0

Multithreading in c# mit tpl

Embed Size (px)

Citation preview

Page 1: Multithreading in c# mit tpl

Multithreading mit C#Mit Visual Studio 2010 und .NET 4.0

Page 2: Multithreading in c# mit tpl

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

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

Prozessoren

Page 5: Multithreading in c# mit tpl

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

Das Problem - Viele Prozesse nur ein CPU

Page 7: Multithreading in c# mit tpl

Das Zeitscheibenmodell – Single CPU

Page 8: Multithreading in c# mit tpl

Das Zeitscheibenmodell – Multicore CPU

Page 9: Multithreading in c# mit tpl

Datenbank

Prozess A

Parallelität in einem Prozess? (1)

Page 10: Multithreading in c# mit tpl

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

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

Multithreading unter .NET

Page 13: Multithreading in c# mit tpl

Der Namespace System.Threading

Page 14: Multithreading in c# mit tpl

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

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

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

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

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

Die Klasse Thread und Threadpool

n

DEMO1_Threads_and_Threadpool

Page 20: Multithreading in c# mit tpl

Synchronisierung

Page 21: Multithreading in c# mit tpl

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

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

Synchronisierung (Beispiel 4)

n

DEMO2_Synchronizing

Page 24: Multithreading in c# mit tpl

Task Parallel Library

Page 25: Multithreading in c# mit tpl

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

Task Parallel Library

n

DEMO3_TPL

Page 27: Multithreading in c# mit tpl

5. Zusammenfassung

Prozessorgeschwindigkeit stagniert Multicoreprozessoren Anpassung unserer Programme Threads Threadpool Synchronisation Tasks Parallel-Klasse

Page 28: Multithreading in c# mit tpl

Fragen & Antworten

Vielen Dank für Ihre Aufmerksamkeit!