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
- J. Allen, Effective Akka. Patterns and Best Practices. Sebastopol, CA, USA: O’Reilly Media, 2013.
- P. Butcher, Seven Concurrency Models in Seven Weeks. When Threads Unravel. Dallas: The Pragmatic Programmers, 2014.
- J. Hettel and M. T. Tran, Nebenläufige Programmierung mit Java. Konzepte und Programmiermodelle für Multicore-Systeme. Heidelberg: dpunkt Verlag, 2016.
- A. S. Tanenbaum and H. Bos. Moderne Betriebssysteme. [4th ed.]. Pearson Studium, 2016.
- V. Vernon, Reactive Messaging Patterns with the Actor Model. Applications and Integration in Scala and Akka. New York: Addison-Wesley, 2016.
Dozentinnen / Dozenten
- Prof. Dr.-Ing. Sandro Leuchter
Empfohlene Vorkenntnisse
Daten zum Modul
| Semester |
3 |
| Unterrichtssprache |
Deutsch |
|
Häufigkeit
|
Jedes Semester
|
| Kreditpunkte (CP)
|
5 |
| Modulverantwortlich |
Prof. Dr.-Ing. Sandro Leuchter |
| Dauer |
1 Semester |
|
Studienleistung
|
Keine |
|
Prüfungsvorleistung
|
Pflichtübung (PU) |
|
Prüfungsleistung
|
Klausur 90 Minuten (K90) |
Semesterwochenstunden (SWS)
| Vorlesung |
2 SWS |
| Labor |
2 SWS |
| Summe |
4 SWS |
Arbeitsaufwand (Workload)
| Vorlesung |
30 h |
| Labor |
30 h |
| Selbststudium |
50 h |
| Aufgaben |
40 h |
| Summe |
150 h |