포크/ 조인 프레임워크는 병렬처리를 위한 프레임워크로
java.util.concurrent 패키지의 핵심인 ExecutorService 인터페이스를 구현한 클래스.
코드에 대한 멀티 스레드 처리가 가능하다.
포크/ 조인 프레임워크의 동작을 확인하면 아래와 같다.
포크(Fork) : 다른 프로세스 혹은 스레트(테스크태스크)를 여러 개로 쪼개서 새롭게 생성
조인(Join) : 포크해서 실행한 프로세스 혹은 스레드(태스크)의 결과를 취합한다.
일을 나눌 수 있다면 여러개로 쪼개서 실행(포크), 하고 최종적으로 실행이 완료된 내용을(조인)해서 결과를 만들어 낸다.
분할 정복 같은 느낌!
포크/ 조인 프레임워크의 대표적인 클래스는 다음과 같다
- ForkJoinPool
- ForkJoinTask
- RecurciveTask *아래 설명할 클래스
- RecursiveAction
* RecurciveTask 를 사용할때 병렬 처리를 할것인지 판단은 본인이 내려야 하는데
그 구조를 수도 코드로 작성하면 아래와 같다.
if (하위 작업으로 분리 할 수 있는지 판단) {
하위 작업으로 분리,
재귀 호출
}
else{
태스크 실행
}
더 자세한 코드에 대한 설명,
docs.oracle.com/javase/8/docs/api/java/util/concurrent/RecursiveTask.html
위 방식은 포크/조인 프레임 워크를 사용하지 않고 그냥 재귀호출로 구현할수 있지만
재귀호출은 멀티 스레드가 아닌 순차 처리가 때문에 되기 때문에 시간이 더 소요되며 CPU 사용률 더 떨어진다.
하지만 반대로 잘못 사용하게 되면 자원을 많이 소모하여 처리속도가 더 떨어질 수 있다.
출처:
book.naver.com/bookdb/book_detail.nhn?bid=16686472
반응형
'java' 카테고리의 다른 글
[JAVA] 객체 메모리 할당 - Stack, Heap, GC (1) | 2021.08.14 |
---|---|
[JAVA]Garbage Collection 실행 과정 (0) | 2021.08.07 |
[JAVA]스트림(Stream) 에서 기본형(Primitive type)은 왜 취약할까? (0) | 2021.04.13 |
[JAVA 개념] 추상클래스와 인터페이스의 차이점 ( + 상속과 구현) (0) | 2021.04.11 |
[Effective java] Item 7 - 종료자(finalize) 사용을 피하라 (0) | 2021.01.30 |