ForkJoinPool은 Java의 java.util.concurrent 패키지에 포함된 클래스로, 포크-조인 프레임워크(fork-join framework)를 지원하는 스레드 풀(thread pool) 구현체입니다. 포크-조인 프레임워크는 병렬 프로그래밍을 위한 디자인 패턴이며, 대규모 작업을 작은 작업들로 분할하고 이를 동시에 실행하여 병렬 처리를 가능하게 합니다.
fork-join pool은 자바 데이터 병렬처리에 대해서 높은 성능과 세분화된 실행(fine-grain task execution: 병렬처리가 가능하게 하는 세분화된 실행)을 가능하게 합니다. 병렬 컴퓨팅 엔진은 많은 higher-level framework에서 사용됩니다.
비동기 작업을 처리하는 paraellelStream과 completable Futures은 fork-join pool을 내부적으로 활용하여 작업을 처리합니다. kotlin과 scala도 fork-join pool을 활용한 대표적인 프레임워크로 알려져 있습니다.
만약 task가 결과를 return하지 않으면 subtask작업이 끝날때까지 기다립니다.
solve(problem)
if problem이 충분히 작으면
문제를 바로 해결 (순차 알고리즘)
else
문제를 각각의 part로 나눈다
(fork) 각 part를 해결하기 위해 새로운 subtask를 fork
(join) 모든 subresult를 갖고 결과를 구성한다.
분할정복의 예로 collection stream을 들수 있습니다.
ref
https://www.youtube.com/watch?v=sJ97pduSygk&list=PLzUU0F4LPfLEBzdbyNVd6lMJNcx6aKdDz
https://en.wikipedia.org/wiki/Fork%E2%80%93join_model