Fork/Joinを使用したスレッド計算(作成中)

1056 ワード

Javaプログラムを実行すると、1つ以上のスレッドからなるプロセスが実行されます.このトピックをより効率的に使用するクラスを紹介します.その始まりはFork/Joinを理解することです.
Fork(分割)/Join(集約)
Forkは複数のタスクを表し,Joinはタスク結果を収集すると考えている.
ここにはWorkStealingの概念もあります.
Work Stealing
1つのDequeueが忙しく、もう1つのDequeueが忙しくない場合、タスクが複数のDequeueに割り当てられて何かを行う場合.この場合,やることのないDequeueは忙しいDequeueの中で待っている仕事であり,それを行うと考えられる.
(※参考:入口と出口が固定されているQueueとは異なり、Dequeueは両端が入口と出口の構造です.)
これらのWork Stealingは基本的にForkJoinに含まれています.
基本的な修行概念は以下の通りである.
if(작업 단위가 충분히 작을 경우){
    해당작업 수행
}else{
    작업을 반으로 쪼개어 두 개 작업으로 나눔.
    두 작업을 동시에 실행, 두 작업 끝날 때까지 결과를 기다림
}
通常、この演算は再帰的です.
Fork/Joinを使用したクラス
ForkJoinPoolを使用するには、基本的に理解しなければならないクラスがあります.

  • ForkJoinPool
    ForkJoin Frameworkの母体
  • は、
  • fork-joinでタスクを作成および実行します.

  • RecursiveTask
  • の実際の操作単位のクラスは、そのクラスを継承する必要があります.計算方法から結果値を返す必要もあります.

  • RecursiveAction
  • RecursiveTaskと同様の用途で、タスク単位のクラスとして継承しなければならないクラスです.結局帰らない.

  • ForkJoinTask
  • RecursiveTaskの親クラスで、forkメソッドとjoinメソッドが定義されています.直接使用しない.