Multithreading in c# mit tpl

Post on 10-May-2015

2.868 views 3 download

Tags:

Transcript of Multithreading in c# mit tpl

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: mail@David-Tielke.de 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!