Parallele Programmierung (PP)
3. Semester
5 ECTS | 4 SWS
Klausur 90 Minuten (K90)
Nutze die volle Leistung moderner Computer: Du lernst, wie mehrere Aufgaben gleichzeitig verarbeitet werden können und wie Programme effizient mit mehreren Prozessoren und Threads arbeiten. Dabei beschäftigst du dich mit Synchronisation, sicheren Datenzugriffen und der Entwicklung schneller, paralleler Anwendungen.
Inhalte
- Parallelität und Nebenläufigkeit, Prozesse, Threads, Co-Routinen/Fibers
- Thread-Konzepte in Java
- kritische Abschnitte aufgrund konkurrierenden Zugriffs auf Daten in Java, gegenseitiger Ausschluss mit synchronized (intrinsic lock)
- Deadlocks, Signalisieren (wait/notify) und Bedingungsvariablen (await/signal), Lebenszyklus von Threads, Interrupts
- Thread Pools, Callable, Future und FutureTask
- Java Speichermodell bei Nebenläufigkeit, Memory Barriers
- Locks (ReentrantLock, ReadWriteLock, StampedLock) und Semaphore
- synchronisierte, unmodifiable und concurrent Collections in Java
- atomare Variablen und ihre Verwendung
- weitere Architekturen und Frameworks für nebenläufige und parallele Programmierung in Java und ggf. anderen Programmiersprachen: z.B. Actor Model, Communicating Sequential Processes, Fork-Join, Map-Reduce, Parallel Streams, Software Transactional Memory, RxJava, Datenparallelismus: GPGPU (OpenCL oder CUDA)
- Performanzbetrachtungen
- Entwurfsmuster (für nebenläufige und parallele Programme)
- Praktische Übungen zur Implementierung asynchroner, nebenläufiger und paralleler Algorithmen mit Java und ggf. anderen Programmiersprachen
Lernziele/Kompetenzen
Die Studierenden sind in der Lage,
- die Probleme und Chancen der parallelen Programmierung zu nennen,
- Probleme in Java-Programmen zu erkennen, die aus Nebenläufigkeit resultieren,
- nebenläufige Programme zu erstellen,
- vorhandene Programme bezüglich ihres Verhalten bei Nebenläufigkeit zu analysieren
Literatur
- Jamie Allen (2013): Effective Akka. Patterns and Best Practices. O'Reilly.
- Paul Butcher (2014): Seven Concurrency Models in Seven Weeks. When Threads Unravel. The Pragmatic Programmers.
- Jörg Hettel und Manh Tien Tran (2016): Nebenläufige Programmierung mit Java. Konzepte und Programmiermodelle für Multicore-Systeme. dpunkt Verlag.
- Andrew S. Tanenbaum und Herbert Bos (2016): Moderne Betriebssysteme. 4., aktualisierte Auflage. Pearson Studium.
- Vaughn Vernon (2016): Reactive Messaging Patterns With The Actor Model. Applications and Integration in Scala and Akka. Pearson Education.
Dozentinnen / Dozenten
- Prof. Dr.-Ing. Sandro Leuchter
Empfohlene Vorkenntnisse
Daten zum Modul
| Semester |
3 |
| Unterrichtssprache |
Deutsch |
|
Häufigkeit
|
Jedes Semester
|
| Kreditpunkte |
5 |
| Modulverantwortlich |
Prof. Dr.-Ing. Sandro Leuchter |
| Dauer |
1 Semester |
| Studienleistung |
Keine |
| Prüfungsvorleistung |
Pflichtübung (PU) |
| Prüfungsleistung |
Klausur 90 Minuten (K90) |
Semesterwochenstunden
| Vorlesung |
2 SWS |
| Labor |
2 SWS |
| Summe |
4 SWS |
Arbeitsaufwand (work load)
| Vorlesung |
30 h |
| Labor |
30 h |
| Selbststudium |
50 h |
| Aufgaben |
40 h |
| Summe |
150 h |