CompletableFuture: Fibers für Java 8

CompletableFuture: Fibers für Java 8

German slides for parallel 2016

013a3a74142a4d2995ac69b07fc26e4c?s=128

Markus KARG

March 28, 2016
Tweet

Transcript

  1. CompletableFuture: Fibers für Java 8 Markus Karg (TeamFX) Head Crashing

    Informatics http://www.headcrashing.eu markus@headcrashing.eu
  2. Copyright (C) 2009 Elsevier, Inc.

  3. Kind Scheduling Communication Manager RAM Overhead Task Change Process preemptive

    IPC, shared m. OS noticeable Very Slow Thread preemptive same memory OS noticeable Slow Fiber cooperative same memory App negligible Very Fast Fibers Fibers erlauben erheblich höhere Parallelität, da Task-Wechselzeit und Speicher-Overhead im Vergleich zu Prozessen und Threads verschwindend gering sind.
  4. Demonstration ThreadsVsFibers.java Trotz hohem Anteil an I/O-Wartezeit sind Fibers gegenüber

    Threads erheblich schneller. Je kürzer der Task ist, desto deutlicher tritt der Vorteil hervor.
  5.  CompletableFuture: Builder für Java-Fibers  CompletionStage: Task-Wechsel-Möglichkeit Eine Fiber

    wird per Completable Future gebildet und besteht aus einer Abfolge von Completion Stages.
  6. Stage a | Stage b / \ Stage c1 Stage

    c2 \ / Stage d | Stage e CompletionStage a = CompletableFuture.supplyAsync(λ a ); CompletionStage b = a.thenApply(λ b ); CompletionStage c1 = b.thenApply(λ c1 ); CompletionStage c2 = b.thenApply(λ c2 ); CompletionStage d = c1.thenCombine(c2, λ d ); CompletionStage e = d.thenConsume(λ e );
  7. thenAccept thenApply thenRun thenCombine *Both *Async

  8. Demonstration ThenRunVsThenRunAsync.java ThenRun bietet keine Kontrollmöglichkeit, vermeidet jedoch unnötige Threadwechsel.

    ThenRunAsyc bietet hervorragende Kontrollmoeglichkeit, erzwingt jedoch Threadwechsel.
  9. Demonstration BranchAndMerge.java Fibers können sich kostengünstig aufsplitten und wieder vereinigen.

    Hierbei bestimmt das Methodensuffix, ob auf alle Zweige gewartet wird oder nur auf einen.
  10. Demonstration ExecutorsDemo.java Blockierende Aufrufe müssen in separatem Thread erfolgen. Gleiches

    gilt für z. B. AWT, Swing, JavaFX, etc.
  11. Demonstration FiberLoops.java Ein Extremfall des Aufsplittens und Vereinigens bilden Streams

    über CompletionStages. Sie sind komplexer aber auch flexibler als ParallelStreams.