Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03275.jsonl.gz/2452

Referenten: Angelika Langer, Training/Consulting, Klaus Kreft
In diesem Workshop geht es um das Java Memory Model und den Fork-Join-Pool (inkl. Ausblick auf “filter/map/reduce for Java” in Java 8).
Multicore-Prozessoren verwenden aufwendige Caching-Mechnismen, um eine gute Verarbeitsgeschwindigkeit zu erreichen. Diese Caching-Verfahren haben dazu geführt, dass die Programmiersprachen ihre Anforderungen an die so-genannte “cache coherence” reduzieren mussten, d.h. es ist keineswegs garantiert, dass alle Threads in einer Anwendung eine übereinstimmende Sicht auf die Daten im Speicher haben. Vielmehr können unterschiedliche Threads zum selben Zeitpunkt unterschiedliche Werte für dieselben Speicherzellen (in verschiedenen Caches) sehen. Dort, wo eine kohärente Sicht auf die Daten benötigt wird, z.B. wenn mehrere Threads über gemeinsam verwendete Daten kommunizieren, müssen über sogenannte Memory Barriers Flushes und Refreshes der Prozessor-Caches ausgelöst werden. Das wird meistens über Locks (bzw. Mutexe) gemacht; es ist komplex, fehleranfällig und kostet Performance. Deshalb gibt es Ideen, die klassische “shared mutable state concurrency” durch einfachere und performantere Alternativen zu ersetzen oder zumindest zu reduzieren.
In Java und dem JDK gibt es zwei alternative Ansätze: (1) das “lock-free programming” mit Hilfe von volatile und Atomics und (2) den Fork-Join-Framework für das Verteilen von rekursiven Aufgaben auf viele Cores. Im Workshop werden die beiden alternativen Ansätze diskutiert und im Praxisteil verwendet.
Der Fork.Join-Pool ist deshalb besonders interessant, weil er eine zentrale Rolle spielt im Zusammenhang mit der Parallelisierung von Zugriffen auf Sequenzen. Im Rahmen des Java Enhancement Proposal JEP 107 “Bulk Data Operations for Collections” (auch als “filter/map/reduce for Java” bekannt) werden für Java 8 Erweiterungen an den bestehenden Collections im JDK spezifiziert, damit “bulk operations” in Zukunft automatisch von mehreren Threads parallel ausgeführt werden. Diese neuen Abstraktionen werden mit Hilfe des Fork-Join-Pools implementiert sein.
Anmeldung unter http://www.ch-open.ch/wstage/ erforderlich!