2021-08-29

0829 fork-join task

 1. ForkJoinPool에서 ForkJoinTask를 생성.

기본적인 방향은 - work-stealing 알고리즘, 분할정복 알고리즘을 채택한다는 것.

그래서 추상 클래스인 ForkJoinTask 을 구현한 클래스의 이름들은 : RecursiveTask, RecursiveAction이다. 둘다 compute()를 구현해야 한다. RecursiveTask는 반환값을 제네릭으로 지정할 수 있고, RecursiveAction은 void이다. ( 클래스명이 잘 나타내주고 있다고 생각한다)

2. invokeAll()혹은 fork()메소드를 통해 task를 쪼개서 스레드별로 실행한다. RecursiveTask의 경우 반환값을 받아야 하기 때문에 join()을 통해서 반환값을 받는다.

3. 해당 메서드를 외부에서 부르기 위해서 invoke()를 사용해서 Recursive객체를 전달한다. void의 경우 join()으로 값을 return 받지 않아도 된다. 혹은 그냥 

int result = forkJoinPool.invoke(customRecursiveTask);

이런식으로 곧바로 받을 수도 있고

customRecursiveTaskFirst.fork(); result = customRecursiveTaskLast.join();

이렇게 따로 받아도 된다.

4. ForkJoinTask는 기본적으로 Future을 상속하고 있는데 - Future가 get()하는 동안 synchronized로 블록되던 문제를 다소 해결하여 훨씬 빠른 성능을 보인다고 한다.


댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...