Fork/Join Framework

1,451 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,451
On SlideShare
0
From Embeds
0
Number of Embeds
170
Actions
Shares
0
Downloads
7
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Fork/Join Framework

  1. 1. Fork/Join Framework 大崎 瑶
  2. 2. なぜ?Fork/Join• 並行性と並列性• 並列性を上げるには?• Work Stealingアルゴリズム
  3. 3. 並行性と並列性• 並行性とは – プログラムが論理的に並行実行可能な状態 – プリエンプティブなスレッドのこと• 並列性とは – 並行性を持つプログラムが時間的に並列に実 行されること ものすごいオレオレ解釈だし、もうちょっと厳密な定義がありそうな 気がしますが・・・
  4. 4. 並行性ポイントは2つ プリエンプティブである(割り込みが可能) この間に別のことが割り込める メモリリソース(変数)を共有する 変数 同じ変数への同時のアクセスを制限する仕組みを持っている
  5. 5. 並行性の例 IO待ちが発生 CPUが遊んでいる間に ほかのことが出来るGUIのプログラミングでは並行動作するように設計するのが基本(でないと、IO待ちで操作がブロックされてしまう)
  6. 6. 並列性並行性をもつプログラムが時系列的に並列に動作する 並行性のあるプログラムの 複数のCPU/Coreで実行される 並列実行 並行性のあるプログラムの 非並列実行 並列性があるほうが 実行時間が短い
  7. 7. 並列性を上げるには?• 並列性を下げる要因 = スレッドの同期処理 – クリティカルセクション – 待ち合わせ Fork/Join Frameworkが – 並列度(Core数、スレッド数) 解決しようとしているのはこ れ!
  8. 8. Executorでは… クリティカルパス 赤いとこ全部待ち時間
  9. 9. 細粒度のタスク細粒度のタスクをうまくCPU/Coreに割り振ってあげれば効率的に使うことが出来る。でも、Executorではそれを自分でうまくスケジューリングしてあげなければならないし、オーバーヘッドも大きいそこで Fork/Join Framework ですよ!!!
  10. 10. タスクの細分化タスクを細分化するには分割統治法 あのフィボナッチだって、クイックソートだって 分割統治 Fork/Join Framework java.util.concurrent.RecursiveTask<V> java.util.concurrent.RecursiveAction 分割統治といえば誰もがアルゴリズムの教科書で最初に習う 再帰処理ですよね!!!
  11. 11. サンプル(フィボナッチ数)サクラバ大先生の連載から拝借http://itpro.nikkeibp.co.jp/article/COLUMN/20110527/360769/?ST=develop&P=3
  12. 12. Work Stealingアルゴリズム分割統治アルゴリズム 分割 (Fork) 統治 (Join) タスクキュー(Deque) PopCPU1 Fork PushCPU2CPU3 StealCPU4
  13. 13. ParallelArayextra166yではParallelArrayが提案されています。(Java8で登場)またまたサンプルを拝借して…http://itpro.nikkeibp.co.jp/article/COLUMN/20110627/361738/?ST=develop&P=4
  14. 14. まとめ• Fork/Join Frameworkは細粒度のタスクを並 列に実行するのに適しています。 – Work Stealingアルゴリズム• タスクを細粒度に分割するには分割統治 アルゴリズムがあります。• Java8ではParallelArrayも登場。• ParallelArrayはLambdaによって使いやすく なる。

×