Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CompletableFuture: Fibers für Java 8

CompletableFuture: Fibers für Java 8

German slides for parallel 2016

Markus KARG

March 28, 2016
Tweet

More Decks by Markus KARG

Other Decks in Programming

Transcript

  1. 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.
  2. 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.
  3.  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.
  4. 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 );
  5. Demonstration ThenRunVsThenRunAsync.java ThenRun bietet keine Kontrollmöglichkeit, vermeidet jedoch unnötige Threadwechsel.

    ThenRunAsyc bietet hervorragende Kontrollmoeglichkeit, erzwingt jedoch Threadwechsel.
  6. 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.
  7. Demonstration FiberLoops.java Ein Extremfall des Aufsplittens und Vereinigens bilden Streams

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