Parallele Programmierung (3IB)
=> Grundlage: Hettel und Tran (2016, Kap. 13)
ForkJoinPool
und “Work-Stealing”ForkJoinTask
RecursiveAction
(Filter)RecursiveTask
(Summieren)ForkJoinPool
und “Work-Stealing” im ThreadpoolForkJoinPool
(seit Java 7) implementiert ExecutorService
:
ForkJoinPool.commonPool()
(seit Java 8)Runtime.getRuntime().availableProcessors()
(max. 32767
)ForkJoinTask<E>
: leichtgewichtiges Future<E>
(soll nicht blockieren)
RecursiveAction
: Kein Rückgabewert (nur Seiteneffekt, z.B. bei in-place/in situ Sortierung)
RecursiveTask<E>
: Funktion mit Rückgabewert (wird z. B. vom “Über-Task” mit join()
geholt und in Ergebnis eingebaut)
Java SE 1.7 API-Dok: java.util.concurrent.ForkJoinPool
pp.12.01-ForkJoinArrayFilter
MAX
überschreiben, die > MAX
sind.pp.12.02-ForkJoinArrayReduce
ARRAY_LEN
Elemente)SLICE_LEN
Elem.SLICE_LEN
Elem.)SLICE_LEN
, ARRAY_LEN