Multithreading und Parallel Programming mit Delphi
Aktuelle Rechner bieten Hyperthreading und Multicore-CPUs oder gleich mehrere Prozessoren. Programme mit mehreren Threads können diese Hardware besser ausnutzen. Daneben erwarten User ebenso wie die Richtlinien aktueller Betriebssysteme ein „Responsive UI“, unabhängig davon, was die Anwendung tut. Lange Datenbankabfragen oder die Nutzung von Cloud-Diensten im Hintergrund dürfen eine Anwendung nicht mehr blockieren. Mit Threads und dem zusätzlichen Parallel-Programming-Library-(PPL-)Framework bietet Delphi einiges an Bordmitteln, um das zu realisieren.
Allerdings erhöhen Threads und Tasks auch die Komplexität von Programmen und bieten bei falscher Verwendung genügend Fallstricke, die für Deadlocks oder Abstürze sorgen können.
Der Workshop gibt eine Einführung in die Verwendung der Thread-Klassen von Delphi und das Design von Threads. Sie lernen die verschiedenen Synchronisationselemente wie Critical Sections, Mutexes, Events und Semaphoren ebenso kennen wie Delphis Hilfsklassen von TMonitor bis TThreadedQueue<T>. Sie lernen die Tasks, Futures und den Threadpool der PPL kennen. Wir stellen Tasks und Threads gegenüber und schauen uns an, wie beide effektiv verwendet werden, um ein reaktives UI mit Threads und/oder Tasks realisieren zu können. Ein Blick auf das das Exception Handling bei Threads und Tasks und ein Blick auf asynchrone Aufrufe in TComponent runden die Themen ab.
Agenda
- Einführung in Multithreading
- Thread-Klasse in Delphi
- Synchronisationsobjekte und Hilfsklassen
- Delphi Parallel Programming Library (PPL)
- Tasks und Futures versus Threads
- Responsive UI realisieren
- Exception Handling bei Threads und Tasks
- Asynchrone Calls in Komponenten
Teilnahmevoraussetzungen
- Sicherer Umgang mit Delphi
- Kenntnisse objektorientierter Entwicklung
Zusätzliche Hinweise
Zum direkten Nachvollziehen der Beispiele und für Übungen wird ein Laptop mit einer Delphi-Version zwischen mindestens Delphi XE7 und der aktuellen Delphi-Version empfohlen. Für einige Beispiele ist eine höhere Delphi-Version erforderlich (APL ab Delphi XE8).