.NET Threading im Detail

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

der Universität Oldenburg
10.2 Wechselseitiger Ausschluss in Hardware
C Tutorium – Semaphoren –
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Objektrelationales Mapping mit JPA Working with Persistent Objects Jonas Bandi Simon Martinelli.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Dynamische Datentypen
Java: Referenzen und Zeichenketten
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
OpenMP Präsentation im Rahmen des Seminars
1 Linux Paging, Caching und Swapping. 1 Vortragsstruktur Paging – Das Virtuelle Speichermodell –Die Page Table im Detail –Page Allocation und Page Deallocation.
Studiengang Informatik FHDW
Vortrag III Hier in der Vorlesungszeit! Anwesenheitspflicht Jede Gruppe hat 6 Minuten! Stellt eure GUI vor –was ihr besonderes gemacht habt –Spektakuläre.
Open Source Prozessor Leon2 Peer Royla und Marco Siebert RST-Labor WS 04/05 Prof. Dr.-Ing. Thomas Risse.
Random Heightmap on GPU
Matrix Multiplication on CUDA
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
SOMA Service-Oriented Mobile learning Architecture.
Duo- und Quad Prozessor-Architektur
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 4 Folie 2 Message Passing mittels Sockets (1) s.a.
Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch © 2004 Microsoft Corporation.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Parallel Matrix Multiplication
Parallel Programming Condition Queues
Style Guidelines für Java und .NET
2.4 Rekursion Klassifikation und Beispiele
Ein Vortrag von Simon Bayer
Was dir Trivialbeispiele in Async and Await nicht sagen! Marcus Kimpenhaus und Martin Möllenbeck.
Prozess-synchronisation
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Thread Synchronisation in JAVA
Betriebssysteme Übung 2. Tutorium. Task 1 – Locks (1) Wozu Locks? Dienen dazu, exklusiven Zugriff auf eine Ressource sicherzustellen Lock = binäre Semaphore.
Objectives Verstehen was unterDelegate verstanden wird
EPROG Tutorium #4 Philipp Effenberger
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
JOMP
Parallelisierung für Multiprozessor-Maschinen
Parallele Programmierung im.NET Framework Darmstadt, Präsentation am Beispiel von C-Sharp (C#)  Wichtige Grundlagen  Generika, Delegate, Lambda,
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Clustering Clustering mit openMosix von Christian Wiese Stefan Krause.
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Parallel Programming Semaphores / Reader - Writer - Lock
1 Softwareentwicklung mit.NET Teil 7.NET Security Dr. Ralph Zeller.
5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater.
Microsoft Student Partner
Java Programme nur ein bisschen objektorientiert.
Multiprocessing mit OpenMPI Marius Albath. Vorlesung Betriebssysteme, Was ist OpenMPI Was ist OpenMPI OpenMPI Standard Setup OpenMPI Standard.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer:
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Threads Alexander Sczyrba Jan Krüger.
Universität Karlsruhe (TH) Forschungsuniversität · gegründet 1825 Lehrstuhl für Programmiersysteme Fakultät für Informatik Software Transactional Memory:
Blowfish mit CUDA Dominik Oepen Inhalt ● Blowfish Grundlagen ● Implementierungsdetails ● Performance ● Fazit.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
1.Event Queue.
Aufgaben zu Rückgabewerten
Netzwerk - Programmierung
Einführung in die Programmierung
Du kommst hier nicht rein!
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Implementieren von Klassen
Schleifen Datenfelder (Arrays) Verzweigungen
Shared Memory Programmierung: Grundlagen
 Präsentation transkript:

.NET Threading im Detail .NET Developer Group Ulm 15.03.2017 Artiso Solutions GmbH 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Agenda Threads, Hardware und der Thread Pool Task Parallel Library (TPL) und warum asynchrone Programmierung wichtig ist Nichtblockierende Synchronisierung und Algorithmen Eure Fragen, Wünsche und Anträge Zwischenrufe erlaubt! 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Zu meiner Person Doktorand der Medieninformatik an der Universität Regensburg Wissenschaftlicher Mitarbeiter an der OTH Regensburg Softwareentwickler bei virtNET Organisator der DNUG Regensburg Blog: www.feo2x.com Twitter: @feo2x YouTube: www.youtube.com/c/kennypflug 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Der rote Faden Warum Threads? 15.03.2017 .NET Threading im Detail

Abstraktion über CPU und RAM Ursprünglich: Single-Threaded OSs, die aber bei Fehlern zum Neustart zwangen. Threads wurden eingeführt, um parallel laufende Software schnell reagierend und robuster zu machen. Threads haben einen nicht zu unterschätzenden Overhead. 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Thread Overhead Memory: 1 – 4MB user mode stack, 12 – 14KB Kernel Mode Context Switching: Sichere Status von Kernel Objekt des alten Threads Lade Status von Kernel Objekt des neuen Threads Führe Thread für ein Quantum (ca. 15ms) aus Beginne von vorne Cache Misses nach Context Switch Assemblies werden benachrichtigt, wenn ein Thread erstellt wird oder endet. 15.03.2017 .NET Threading im Detail

Wie viele Threads kann ich allokieren? Live Demo 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Threading vermeiden? Der Overhead von Threads ist nicht zu vernachlässigen. Multi-Threading ist schwierig Vermeide Threading, wo möglich. Aber kommt man mit Single-Threading zum Ziel? 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Der Thread Pool 15.03.2017 .NET Threading im Detail

Multi-Threading via Thread Pool Der Thread Pool hält eine gewisse Anzahl an Background Threads am Leben. Auf diese können Operationen ausgelagert werden mit ThreadPool.QueueUserWorkItem Der Anzahl der Threads im Pool wird dynamisch erhöht und verringert 15.03.2017 .NET Threading im Detail

Wie viele Threads sollte ein Prozess nutzen? Abhängig von der Anzahl an Cores auf dem Zielsystem Idealerweise: 1 Thread pro Core Der Thread Pool verwaltet eine optimale Anzahl an Threads automatisch für uns 15.03.2017 .NET Threading im Detail

Wie bereite ich den Thread Pool am besten Kopfschmerzen? Live Demo 15.03.2017 .NET Threading im Detail

Antwort: indem ich seine Threads blockiere 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices IRP Hardware I/O Thread blockiert FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Synchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Asynchroner Zugriff auf I/O Devices IRP Hardware I/O FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Asynchroner Zugriff auf I/O Devices IRP Hardware I/O FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Asynchroner Zugriff auf I/O Devices IRP Hardware I/O FileStream Windows I/O Dispatcher NTFS Driver 15.03.2017 .NET Threading im Detail

Asynchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver Eingereiht in den Thread Pool 15.03.2017 .NET Threading im Detail

Asynchroner Zugriff auf I/O Devices IRP FileStream Windows I/O Dispatcher NTFS Driver Eingereiht in den Thread Pool 15.03.2017 .NET Threading im Detail

FileStream asynchron nutzen var fs = new FileStream(..., FileOptions.Asynchronous); await fs.ReadToEndAsync(); 15.03.2017 .NET Threading im Detail

I/O gebundene Applikationen sind die Regel 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Kurz zusammengefasst Threads wurden geschaffen, um Software responsive und robust zu machen Sie haben einen wesentlichen Performance-Overhead Der Thread Pool hilft uns, Threads wiederzuverwenden und optimiert dynamisch auf die Prozessoranzahl des Zielsystems Threads auf dem Thread Pool sollten möglichst nicht blockieren 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Tasks und Async Await 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Wofür Tasks? Eine Abstraktion über eine asynchrone Operation Bieten Informationen wie Ergebnis, geworfene Exceptions und Status der Operation 15.03.2017 .NET Threading im Detail

Was man so alles machen kann mit Tasks Task.Start, Task.Run Task.Wait, Task.WaitAll, Task.WaitAny, Task.Result Task.ContinueWith Task.WhenAll, Task.WhenAny Task.CompletedTask, Task.FromResult Und das wichtigste: asynchron warten mit async await 15.03.2017 .NET Threading im Detail

Async Await Decompiled Live Demo 15.03.2017 .NET Threading im Detail

Async Await und O-O Design Core 15.03.2017 .NET Threading im Detail

Async Await und O-O Design User Interface Service Communication Core Data Access 15.03.2017 .NET Threading im Detail

Async Await und O-O Design User Interface Service Communication Core IRepository Data Access MongoRepository 15.03.2017 .NET Threading im Detail

Async Await und O-O Design public interface IRepository { Contact LoadById(Guid id); } User Interface public class MongoRepository : IRepository { public Contact LoadById(Guid id); } Service Communication Core IRepository Data Access MongoRepository 15.03.2017 .NET Threading im Detail

Async Await und O-O Design public interface IRepository { Contact LoadById(Guid id); } User Interface public class MongoRepository : IRepository { public async Task<Contact> LoadById(…); } Service Communication Core IRepository Data Access MongoRepository 15.03.2017 .NET Threading im Detail

Async Await und O-O Design public interface IRepository { Task<Contact> LoadById(Guid id); } User Interface public class MongoRepository : IRepository { public async Task<Contact> LoadById(…); } Service Communication Core IRepository Data Access MongoRepository 15.03.2017 .NET Threading im Detail

SynchronizationContext Eine await Operation kann auf den Ursprungsthread zurückkehren, wenn mit ihm ein SynchronizationContext assoziiert ist. Dieser wird üblicherweise von UI Frameworks initialisiert (aber auch von ASP.NET). 15.03.2017 .NET Threading im Detail

Nichtblockierende Synchronisierung und Algorithmen 15.03.2017 .NET Threading im Detail

Was passiert bei Multi-Threading ohne Synchronisation? public class Foo { int _answer; bool _isComplete; void ThreadA() _answer = 42; _isComplete = true; } void ThreadB() if (_isComplete) Console.WriteLine(_answer); Mögliche Ausgaben: 42 und 0 Hier kann Caching Optimization und Instruction Reordering auftreten. Letzteres heißt, dass es dem C# Compiler, dem JIT Compiler, oder dem Prozessor zur Laufzeit erlaubt ist, die Reihenfolge der Statements zu vertauschen, solange dies im Single- Threaded Context zum selben Ergebnis führt (dies ist stark plattformabhängig). 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Full Memory Fences public class Foo { int _answer; bool _isComplete; void ThreadA() _answer = 42; Interlocked.MemoryBarrier(); _isComplete = true; } void ThreadB() if (_isComplete) Console.WriteLine(_answer); Die hier eingeführten Fences verhindern Instruction Reordering _isComplete = true darf nicht vor _answer = 42 ausgeführt… …und if (_isComplete) darf nicht vor Console.WriteLine(_answer) ausgeführt werden. 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Full Memory Fences public class Foo { int _answer; bool _isComplete; void ThreadA() _answer = 42; Interlocked.MemoryBarrier(); _isComplete = true; } void ThreadB() if (_isComplete) Console.WriteLine(_answer); Die hier eingeführten Fences verhindern Cache Optimization _isComplete ist true, wenn ThreadB nach ThreadA läuft Dies kann bei einem Multicore- Prozessor zur Synchronisation zwischen den Cores führen 15.03.2017 .NET Threading im Detail

Die hier nutzen auch Full Fences Das lock statement (Monitor.Enter / Monitor.Exit) Alle Methoden der Klasse Interlocked Asynchrone Callbacks und Task Continuations Alle Signale (AutoResetEvent, ManualResetEvent, usw.) 15.03.2017 .NET Threading im Detail

Multithread-Synchronisierung – braucht‘s das wirklich? Live Demo 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Volatile Read / Write Spezielle Methoden, die den Compilern (C# / JIT) und CPUs mitteilen, dass bestimmte Optimierungen nicht genutzt werden dürfen Vorhanden für Numerische Typen (int, uint, double, etc.), bool und Referenztypen Nutzen Aquire / Release Fences statt Full Fences – d.h. dass eine Write Operation gefolgt von einem Read Opertion vertauscht werden darf Merke: Wenn du eine Methode schreibst, welche von mehreren Threads gleichzeitig ausgeführt wird und auf Shared Memory zugreift, dass lese das erste Datum mit Volatile.Read, und schreibe das letzte Datum mit Volatile.Write. 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Interlocked // return ++target; public static int Increment(ref int target); // return ––target; public static int Decrement(ref int target); // return target += value; public static int Add(ref int target, int value); // var old = target; target = value; return old; public static int Exchange(ref int target, int value); // var old = target; // if (target == comparand) target = value; // return old; public static int CompareExchange(ref int target, int value, int comparand); 15.03.2017 .NET Threading im Detail

Multithreaded Copying Live Demo 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Lock-Free Algorithms Gibt’s eigentlich lock-freie ConcurrentDictionaries? 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee Hash Code = 123 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee Hash Code = 123 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee Interlocked.CompareExchange A Hash Code = 123 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee B Interlocked.CompareExchange A Hash Code = 123 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee B Interlocked.CompareExchange A Hash Code = 123 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee B A Interlocked.CompareExchange Hash Code = 123 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee B A 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee B A D 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary - Idee B A D 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Lock-Free Dictionary Live Demo 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary Read Performance 15.03.2017 .NET Threading im Detail

Lock-Free Dictionary Write Performance 15.03.2017 .NET Threading im Detail

Lock-Free Algorithms – Lessons Learned Finde alle Race Conditions Gegen Heisenbugs hilft nur Lock-Free Logging Bei nicht-atomaren Operationen kann es hilfreich sein, wenn alle (beteiligten) Threads mithelfen Performancevorteil? Messen! 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Zusammenfassend Thread Pool Threads nicht blockieren I/O Devices asynchron ansprechen (async await ist dein Freund) Lange Operationen innerhalb eines lock vermeiden – hilft hier vielleicht Volatile oder Interlocked weiter? 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Quellen: Jeffrey Richter – Advanced .NET Threading: Part 1 Part 2 Part 3 Part 4 Part 5 Joseph Albahari – Threading in .NET http://www.albahari.com/threading/ Jon Skeet – Asynchronous C# 5.0 Pluralsight Course on Asynchronous C# 5.0 Cliff Click – A Non-Blocking HashTable http://www.cliffc.org/blog/2007/03/26/non-blocking-hashtable/ 15.03.2017 .NET Threading im Detail

.NET Threading im Detail Herzlichen Dank. Fragen? Lust auf ein Bierchen? 15.03.2017 .NET Threading im Detail