Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Fork/Join for Fun and Profit!

2,318 views

Published on

This session was presented at the JFall 2011 conference in The Netherlands. It introduces the Fork/Join framework that was introduced in Java 7. Example code can be found at http://bit.y/jfall-forkjoin

Published in: Technology, News & Politics
  • Be the first to comment

Fork/Join for Fun and Profit!

  1. 1. Fork/Join for Fun and Profit! @Sander_Mak
  2. 2. What is the problem anyway?
  3. 3. What is the problem anyway?
  4. 4. What is the problem anyway?
  5. 5. What is the problem anyway?‣ So let the Compiler figure out the hard stuff! if (n < 2) n else fib(n - 1) + fib(n - 2) n < 2 n‣ Or maybe not ...
  6. 6. Fork/Join in picturesFork:Recursively decompose Resultlarge task into subtasks Task 1Join: Task 2 Task 3Await results ofrecursive tasks Task 4 Task 5 Task 6 Task 7and combine
  7. 7. Fork/Join in pseudocodecompute(problem) {  if (problem.size < threshold)    directlySolve(problem)  else {    do-forked { leftResult = compute(left(problem)) rightResult = compute(right(problem)) }    join(leftResult, rightResult)    return combine(leftResult, rightResult)  }}
  8. 8. ForkJoinPoolIntroducing:  java.uCl.concurrent.ForkJoinPool ForkJoinTask  java.uCl.concurrent.ForkJoinTask RecursiveAction RecursiveTaskForkJoinPool:void execute (ForkJoinTask<?>)T invoke (ForkJoinTask<T>)ForkJoinTask<T> submit (ForkJoinTask<T>)  
  9. 9. ForkJoinPoolIntroducing:  java.uCl.concurrent.ForkJoinPool Worker 1‣ Implements ExecutorService‣ Autosizing workers Worker 2‣ Double‐ended queue‣ Workstealing algorithm Worker 3  
  10. 10. Sorting demoMergesort
  11. 11. ForkJoinTasks‣ 100 < ‘basic computaConal steps’ < 10.000‣ Acyclic, typically decreasing in size‣ Join doesn’t block thread!‣ Do:  ‣ OpCmize sequenCal threshold ‣ Share, don’t copy input (task locality)‣ Don’t: ‣ Synchronize/lock (but use: Phaser) ‣ Do blocking I/O
  12. 12. Work stealingWorker 1 Worker 2 Worker 3 ForkJoinPool
  13. 13. Speedups
  14. 14. What about threads?‣ Heavyweight (try starCng a million)‣ Implicit dependencies between tasks ‣ Manual synchronizaCon ‣ Deadlock/livelock/race condiCons‣ Hard to scale to available parallelism
  15. 15. Pooling/ExecutorService then?‣ ForkJoinPool implements ExecutorService‣ Coarse‐grained independent tasks‣ Recursively decomposed tasks spend most Cme  waiCng ‣ In normal threadpool: starvaCon‣ Task‐queue of threadpool‐backed ExecutorService not  opCmized for many small tasks‣ No workstealing
  16. 16. Map/Reduce?Environment Single JVM ClusterModel Recursive forking O^en single mapScales with Cores/CPUs NodesWorker Workstealing No inter‐node interacDon communicaCon
  17. 17. DemoSony’s been hacked... Are we compromised...?
  18. 18. Fork/Join and‣ ForkJoinPool starts threads ‣ Illegal in EJBs ‣ Fair game in servlets/CDI beans‣ Don’t create ForkJoinPool for each request‣ Idea: WorkManager to create poolthreads‣ Single pool, async submit(ForkJoinTask) ‣ Don’t Ce up request thread: Servlet 3.0
  19. 19. Alternatives outside Java?‣ Actors‣ So^ware transacConal memory‣ Dataflow concurrency‣ Agents‣ ... Some of this built on F/J Akka GPars
  20. 20. Criticism‣ ImplementaCon too complex (uses Unsafe)‣ Some assumpCons quesConable ‣ 1‐1 mapping workerthread/OS thread ‣ Workstealing best opCon?‣ Scalability 100+ cores?
  21. 21. Future GPU? Java 8 OpenCL? Java 7 Parallel Java 5 Collections Fork/JoinJava1.0 - 1.4 - j.u.concurrent: high-level locks, concurrent coll.- threads- synchronized- volatile
  22. 22. Futureint scanLog(List<String> lines, String query) { Pattern p = ... return lines.parallel() .filter(s => p.matcher(s).matches()) .count();}
  23. 23. ForkJoinPool.shutDownNow() Questions?Code @ bit.ly/jfall-forkjoin

×