Parallele Programmierung in Java

Performante Multi-Core-Software für Edge, IoT und Server

In Zusammenarbeit mit der Gesellschaft für Informatik (GI)

Auf einen Blick

3 Tages-Seminar
14.10.2019 - 16.10.2019
9:00 Uhr
in Ostfildern bei Stuttgart

Technische Akademie Esslingen
An der Akademie 5
73760 Ostfildern

EUR 1.440,00(MwSt.-frei)

Veranstaltung Nr. 35405.00.001


Inhouse Training anfordern

Infomaterial anfordern

Seminar weiterempfehlen


Referent:
Dipl.-Math. M. Abu-Khalil
Siemens AG, Energy Management Division, Berlin

Teilnehmer dieser Veranstaltung interessierten sich auch für

Beschreibung

Die Digitalisierung basiert auf der Vernetzung von Applikationen, die auf Edge- und IoT-Geräten realisiert werden. Die dafür nötige Performance kann nur durch die intelligente Nutzung von Multi-Core-CPUs erreicht werden. Die Sprache Java bietet eine Vielzahl von Technologien für die effiziente Multi-Core-Programmierung an.

In diesem praxisorientierten Seminar wird die parallele Programmierung in Java von Grund auf erschlossen. Sie werden dadurch in die Lage versetzt, effiziente, deterministische parallele Programme in Java eigenständig zu entwerfen, und Sie lernen, die richtigen Technologien und Architekturen für Ihren Anwendungsfall auszuwählen.
Im Laufe der Jahre sind stetig neue parallele APIs ins JDK aufgenommen worden, um Multicore-CPUs einfach und effizient nutzbar zu machen. Dadurch ist Java eine ideale Sprache für Parallele Anwendungen, auch im Realtime- und Embedded-Bereich. Sie lernen im Seminar alle wichtigen APIs für die Parallelität in Java kennen, und Sie verstehen im Detail, welche technologischen Paradigmen diesen jeweils zugrunde liegen.

Sie programmieren im Seminar zahlreiche Übungen, um die Tricks und Schwierigkeiten der Parallelität praktisch zu erfahren. So sehen Sie, wie man mit Threads Algorithmen beschleunigt, und lernen dabei auch die Fallstricke einer unüberlegten Parallelisierung kennen. Sie setzen Fork-Join-Tasks ein und erkennen an konkreten Beispielen, wo diese den klassischen Threads überlegen sind. Mit Java Parallel Streams lernen Sie, ein elegantes API für die transparente parallele Datenverarbeitung einzusetzen, und Sie lernen, mit der Java Realtime-Erweiterung zu programmieren.
Grundlagen der Parallelität, u.a. der sichere gegenseitige Ausschluss mit synchronized und mit expliziten Mutexen, die Koordination über das Monitor Pattern, der korrekte Einsatz von Condition Variablen sowie ein sicherer Umgang mit dem Java Memory-Modell, werden theoretisch erschlossen und praktisch erfahrbar gemacht.
Um das Verhalten Ihrer parallelen Programme genau zu verstehen, erhalten Sie einen tiefen Einblick in die Realisierung von Threads und Synchronisation im Zusammenspiel der Java VM mit dem unterliegenden Betriebssystem und der Hardware.

Ziel der Weiterbildung

> Parallelisierung von Software mit Java beherrschen
> Grundlagen und praktischen Anwendung der Parallelen Programmierung beherrschen
> Java APIs für Parallele Programmierung anwenden und bewerten
> Threads, Fork-Join-Tasks, Parallel-Streams, Completable-Future praktisch einsetzen
> Java-Memory-Modell: deterministische Software für aktuelle Multicore-Hardware schreiben
> Java Realtime-Erweiterungen einsetzen
> Software-Architekturen für die Einführung von Multi-Core-CPUs in Embedded-Realtime-Systemen bewerten

Das Seminar ist interaktiv, die aktuellen Projekte der Teilnehmer werden thematisiert.

Der Praxistransfer wird durch zahlreiche Programmierübungen sichergestellt, zum Beispiel:
> Kosten und Risiken von Threads: Wie parallelisiere ich stabil und effizient?
> Algorithmen-Parallelisierung mit Threads (Quicksort, Matrix)
> Fork-Join-Tasks (Skalierbare Parallelität)
> Parallel-Streams (Datenpipelines)
> Completable-Future: Task-Parallelität
> Memory-Modell (Sequential-Consistency)

Sie erhalten Qualität
Das Qualitätsmanagementsystem der Technischen Akademie Esslingen ist nach DIN EN ISO 9001 und AZAV zertifiziert.

Teilnehmerkreis

Das Seminar richtet sich an Entwickler, Architekten und Entscheider, die parallele Software mit Java entwickeln wollen.
Es eignet sich auch für Nutzer anderer Programmiersprachen, da die Konzepte der Parellelität allgemeingültig erschlossen werden.

Inhalte

Montag, 14. bis Mittwoch, 16. Oktober 2019
9.00 bis 12.15 und 13.45 bis 17.00 Uhr

1. Grundlagen der Parallelität in Java
1.1 Technologieübersicht: Threads, ForkJoin-Tasks, Parallel-Streams, Completable-Future
1.2 Parallelisierung von Algorithmen: Performance im Multi-Core
1.3 gegenseitiger Ausschluss: Realisierung von Mutex in JVM und Betriebssystem
1.4 Realtime-Java (RTSJ): die elegante Java-API für die Realtime Programmierung

2. Java Thread Programmierung: mächtig, aber riskant
2.1 Java Thread API
> Starten, joinen, Exceptionhandling
> Parallelisierung mit Threads: Performancesteigerung vs. Kosten und Risiken
> Threadpool und Future: effiziente Thread-Nutzung, Use-Cases, Grenzen
> Architektur von Threads in der JVM und die Kooperation mit dem Betriebssystem
2.2 Synchronisation in Java
> das synchronized Keyword: implizite blockorientierte Synchronisation
> ReentrantLock, ReentrantReadWriteLock, Semaphore: explizite Synchronisation
> CyclicBarrier, Phaser: Synchronisation komplexer Abläufe
> Risiken der Synchronisation: Deadlock und Data-Race
2.3 Monitor und Condition-Variable in Java
> Monitor Pattern: Realisierung von Producer-Consumer Szenarien
> wait() und notify(): sprachintegrierter Monitor
> Condition: explizite Monitor-Implementierung
> BlockingQueue: gekapselter Monitor, einfache Realisierung von Producer-Consumer
2.4 Realtime-Java
> Realtime-Java am Beispiel der AICAS Virtual Machine
> Parallele Programmierung in Realtime-Systemen: Vorgehensweisen und Risiken
> Scheduling-Strategien, Priority-Inversion und Priority-Inheritance

3. Java Fork-Join-Tasks: effiziente, skalierbare Parallelität
> User-Mode Work-Stealing Task-Scheduler: löst Probleme der Thread-Parallelität
> ForkJoinTask API: Bäume für die Daten- und Task-Parallelität
> Parallelisierung rekursiver Algorithmen mit ForkJoin-Tasks
> ForkJoinPool API: Optimierungsoptionen
> CompletableFuture: API für Task-Parallelität
> CountedCompleter: Basis für die Parallel-Streams
> Architektur der ForkJoin-Tasks im JDK

4. Parallel-Streams: implizite Datenparallelität
4.1 Map-Reduce Pipeline ermöglicht automatische Parallelisierung
> terminale und intermediäre Operationen: map(), reduce(), filter(), flatMap(), collect()
> funktionale operationale Parameter: zustandslos und seiteneffektfrei
4.2 Spliterator-API: rekursive Partitionierung von Datenstrukturen
> Spliteratoren des JDK verstehen und nutzen
> eigene Spliteratoren programmieren
4.3 Collector-API: mutable Reduktion
> Anwendung der Standard-Collectoren: joining(), groupingBy(), mapping()
> eigene Collectoren für spezielle Anforderungen programmieren
4.4 Architektur der Parallel-Streams im JDK auf Basis von ForkJoin-Tasks

5. Hardwarenahe Aspekte der Parallelität
5.1 Java Memory-Model
> die „starke Garantie“ des JMM: einfache Regel für deterministische Parallelität
> Definition und Semantik des JMM
5.2 Spinlocks und atomare Instruktionen
> Realisierungsbasis für den gegenseitigen Ausschluss
> effiziente Alternative zur Synchronisation

6. Parallele Architekturen
> Wie wähle ich die richtige API für meinen Anwendungsfall aus?
> Welche Architekturen haben sich in Multi-Core-Projekten bewährt?

Referenten

Dipl.-Math. Marwan Abu-Khalil
Senior Software Architekt für parallele und verteilte Systeme im Forschungsbereich der Siemens AG, Trainer,

Termine & Preise

Extras
Die Seminarteilnahme beinhaltet Verpflegung und ausführliche Seminarunterlagen.

Die Teilnehmerzahl ist begrenzt, um den optimalen Lernerfolg zu garantieren.

Kosten
Die Kosten betragen pro Teilnehmer EUR 1.440,00(MwSt.-frei), inklusive aller Extras.

Die nächsten Termine

Datum / Uhrzeit Seminartitel Ort Preis
14.10.2019, 9:00 Uhr Parallele Programmierung in Java Ostfildern$$ortdetail$$ EUR 1.440,00

© Technische Akademie Esslingen e.V., An der Akademie 5, 73760 Ostfildern  | Impressum