fork-join
· 9 min read
원본:https://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
Fork/join framework은 ExecutorService의 구현체 중 하나로 Fork/join framework를 사용하면 다중 프로세서를 활용할 수 있다. 여러 재귀적으로(쪼개져 나온 작업으로 되돌아 갈 수 있는) 작은 작업으로 쪼개어 처리할 수 있는 작업 처리를 위해 설계 되었다. 애플리케이션 성능을 향상 시킬 수 있도록 모든 가용한 프로세싱 파워를 사용하는 것이 목적이다.
다른 ExecutorService 구현체처럼, fork/join framework은 여러 작업을 쓰레드 풀(pool)내의 워커(worker)쓰레드로 분배한다. Fork/join framework의 차별점은 work-stealing 알고리즘을 사용하여 일을 분배하도록 하는 것이며, 워커 쓰레드가 더이상 처리할 것이 없는 경우, 다른 작업 처리에 바쁜 다른 워커 쓰레드가 처리할 것을 "훔쳐"와서 처리하도록 한다.
Fork/join framework의 핵심은 ForkJoinPool 클래스이며, ForkJoinPool 클래스는 AbstractExecutorService 클래스를 상속/확장한다. ForkJoinPool은 핵심이 되는 work stealing 알고리즘을 구현하고 ForkJoinTask 프로세스들을 실행한다.