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に含まれています.
基本的な修行概念は以下の通りである.
Fork/Joinを使用したクラス
ForkJoinPoolを使用するには、基本的に理解しなければならないクラスがあります.
ForkJoinPool
ForkJoin Frameworkの母体 は、 fork-joinでタスクを作成および実行します.
RecursiveTask の実際の操作単位のクラスは、そのクラスを継承する必要があります.計算方法から結果値を返す必要もあります.
RecursiveAction RecursiveTaskと同様の用途で、タスク単位のクラスとして継承しなければならないクラスです.結局帰らない.
ForkJoinTask RecursiveTaskの親クラスで、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の母体
RecursiveTask
RecursiveAction
ForkJoinTask
Reference
この問題について(Fork/Joinを使用したスレッド計算(作成中)), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_isaac/ForkJoin을-이용한-스레드-연산작성중テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol