SlideShare a Scribd company logo
Fork/Join Framework

      大崎 瑶
なぜ?Fork/Join
• 並行性と並列性
• 並列性を上げるには?
• Work Stealingアルゴリズム
並行性と並列性
• 並行性とは
 – プログラムが論理的に並行実行可能な状態
 – プリエンプティブなスレッドのこと
• 並列性とは
 – 並行性を持つプログラムが時間的に並列に実
   行されること

 ものすごいオレオレ解釈だし、もうちょっと厳密な定義がありそうな
 気がしますが・・・
並行性
ポイントは2つ
 プリエンプティブである(割り込みが可能)




           この間に別のことが割り込める


  メモリリソース(変数)を共有する


          変数    同じ変数への同時のアクセスを制限する仕組みを持っている
並行性の例
         IO待ちが発生




           CPUが遊んでいる間に
            ほかのことが出来る




GUIのプログラミングでは並行動作するように設計するのが
基本
(でないと、IO待ちで操作がブロックされてしまう)
並列性
並行性をもつプログラムが時系列的に並列に動作する

 並行性のあるプログラムの          複数のCPU/Coreで実行される
 並列実行




                            並行性のあるプログラムの
                            非並列実行

                並列性があるほうが
                実行時間が短い
並列性を上げるには?
• 並列性を下げる要因 =         スレッドの同期処理
 – クリティカルセクション
 – 待ち合わせ
                  Fork/Join Frameworkが
 – 並列度(Core数、スレッド数)
                  解決しようとしているのはこ
                      れ!
Executorでは…

         クリティカルパス




        赤いとこ全部待ち時間
細粒度のタスク




細粒度のタスクをうまくCPU/Coreに割り振ってあげれば
効率的に使うことが出来る。
でも、Executorではそれを自分でうまくスケジューリングして
あげなければならないし、オーバーヘッドも大きい



そこで Fork/Join Framework ですよ!!!
タスクの細分化
タスクを細分化するには分割統治法

         あのフィボナッチだって、クイックソートだって
         分割統治



 Fork/Join Framework

   java.util.concurrent.RecursiveTask<V>
   java.util.concurrent.RecursiveAction

    分割統治といえば誰もがアルゴリズムの教科書で最初に習う
    再帰処理ですよね!!!
サンプル(フィボナッチ数)

サクラバ大先生の連載から拝借




http://itpro.nikkeibp.co.jp/article/COLUMN/20110527/360769/?ST=de
velop&P=3
Work Stealingアルゴリズム
分割統治アルゴリズム

                                   分割
                                   (Fork)

                                   統治
                                   (Join)



                   タスクキュー(Deque)
            Pop
CPU1
       Fork Push
CPU2
CPU3
                          Steal
CPU4
ParallelAray
extra166yではParallelArrayが提案されています。(Java8で登場)


またまたサンプルを拝借して…




http://itpro.nikkeibp.co.jp/article/COLUMN/20110627/361738/?ST=d
evelop&P=4
まとめ
• Fork/Join Frameworkは細粒度のタスクを並
  列に実行するのに適しています。
 – Work Stealingアルゴリズム
• タスクを細粒度に分割するには分割統治
  アルゴリズムがあります。
• Java8ではParallelArrayも登場。
• ParallelArrayはLambdaによって使いやすく
  なる。

More Related Content

PDF
Final LINQ Extensions
PDF
150421 es6とかな話
PDF
async/await不要論
PPTX
Kotlinについて学んだコト
PDF
Final LINQ Extensions II
PDF
async/awaitダークサイド is 何
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
Xcore introduction
Final LINQ Extensions
150421 es6とかな話
async/await不要論
Kotlinについて学んだコト
Final LINQ Extensions II
async/awaitダークサイド is 何
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
Xcore introduction

Viewers also liked (17)

PDF
第37回NDS Java並行処理 今昔物語
PPTX
Web Component概要
PDF
PyPy 紹介
PDF
Node-v0.12のTLSを256倍使いこなす方法
PDF
Node-v0.12の新機能について
PDF
ECMAScript没proposal追悼式
PDF
C++の話(本当にあった怖い話)
PDF
スマホデザインパターン なう
PDF
バグハンターの哀しみ
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
PDF
Bitcoinを技術的に理解する
PDF
最強オブジェクト指向言語 JavaScript 再入門!
PDF
ES6 in Practice
PDF
You Don't Know ES Modules
PDF
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
PDF
SSL/TLSの基礎と最新動向
PPTX
自転車のVRシステムがあったら欲しいですか?
第37回NDS Java並行処理 今昔物語
Web Component概要
PyPy 紹介
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12の新機能について
ECMAScript没proposal追悼式
C++の話(本当にあった怖い話)
スマホデザインパターン なう
バグハンターの哀しみ
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Bitcoinを技術的に理解する
最強オブジェクト指向言語 JavaScript 再入門!
ES6 in Practice
You Don't Know ES Modules
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
SSL/TLSの基礎と最新動向
自転車のVRシステムがあったら欲しいですか?
Ad

Similar to Fork/Join Framework (20)

PDF
「宣言的プログラミング」とSDNのひとつの形態
PDF
Mk network programmability-03
PDF
できる!並列・並行プログラミング
PPTX
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
PDF
Scalaz-StreamによるFunctional Reactive Programming
PPTX
Startup JavaScript
PPTX
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
PPTX
Ll tiger clojure
PPT
Scala Daysに行ってみて
PDF
PlaySQLAlchemy: SQLAlchemy入門
PDF
Principles of Transaction Processing Second Edition 9章 4~9節
PDF
Project Loom - 限定継続と軽量スレッド -
PPT
2009年のPHPフレームワーク
PDF
Example of exiting legacy system
PPTX
Durable function storage provider
PDF
Apache Mesosってなに
PDF
並行処理初心者のためのAkka入門
PPTX
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
PDF
Apache Auroraの始めかた
PDF
Pythonの非同期処理を始める前に
「宣言的プログラミング」とSDNのひとつの形態
Mk network programmability-03
できる!並列・並行プログラミング
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
Scalaz-StreamによるFunctional Reactive Programming
Startup JavaScript
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
Ll tiger clojure
Scala Daysに行ってみて
PlaySQLAlchemy: SQLAlchemy入門
Principles of Transaction Processing Second Edition 9章 4~9節
Project Loom - 限定継続と軽量スレッド -
2009年のPHPフレームワーク
Example of exiting legacy system
Durable function storage provider
Apache Mesosってなに
並行処理初心者のためのAkka入門
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
Apache Auroraの始めかた
Pythonの非同期処理を始める前に
Ad

More from Appresso Engineering Team (20)

PDF
20150302 java8 第一回_ラムダ式(1)
PPTX
Effective Java 輪読会 項目77-78
PPTX
Effective Java 輪読会 項目74-75
PDF
マルチスレッド デザインパターン ― Single Threaded Execution
PDF
JavaScript 勉強会 ― 変数・演算子・文
PDF
JavaScript 勉強会 ― 型と値
PPTX
Effective Java 輪読会 項目69-70追加
PPTX
Effective Java 輪読会 項目69-70
PPTX
Effective Java 輪読会 項目66-68
PPTX
Effective Java 輪読会 項目71-73
PPTX
Java Day Tokyo 2014 まとめ (chen)
PPTX
Effective Java 輪読会 項目63-65
PPTX
Effective Java 輪読会 項目60-62
PPTX
Effective java 輪読会 項目57-59
PPTX
Effective Java 輪読会 項目49-52
PPTX
Effective Java 輪読会 項目45-48
PPTX
Effective Java 輪読会 項目53-56
PPTX
Effective Java 輪読会 第7章 項目43-44
PDF
Effective Java 輪読会 第7章 項目41-42
PPTX
Effective Java 輪読会 第7章 項目38-40
20150302 java8 第一回_ラムダ式(1)
Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目74-75
マルチスレッド デザインパターン ― Single Threaded Execution
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 型と値
Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目71-73
Java Day Tokyo 2014 まとめ (chen)
Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目60-62
Effective java 輪読会 項目57-59
Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目53-56
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目38-40

Fork/Join Framework