W2AS2L
2023. 7. 3. 15:51
2023. 7. 3. 15:51
CompletionStage 인터페이스
ForkJoinPool - thread pool
- CompletableFuture은 내부적으로 비동기 함수들을 실행하기 위해 ForkJoinPool을 사용
- ForkJoinPool의 기본 size = 할당된 코어 -1
- 데몬 쓰레드
ForkJoinPool - fork & join
- Task를 fork를 통해서 subtask로 나누고
- Thread pool에서 steal work 알고리즘을 이용해서 균등하게 처리
- join을 통해서 결과를 생성
CompletionStage 연산자
CompletionStage 연산자 조합
- 50개에 가까운 연산자들을 활용하여 비동기 task들을 실행하고 값을 변형하는 등 chaining을 이용한 조합 가능
- 에러를 처리하기 위한 콜백 제공
then**[Async] 차이
- stage에 상태에 따라 caller 쓰레드에서 action을 수행 하거나 callee 쓰레드에서 action을 실행 하는 등 파악하기 어렵다.
- 하지만 then**Async에서는 thread pool에 있는 쓰레드에서 action을 실행(항상)
- 모든 then**Async 연산자는 executor를 추가 인자로 받는다.
- 이를 통해 다른 쓰레드풀로 task를 실행할 수 있다.
thenAccept[Async]
- Consumer를 파라미터로 받는다.
- 이전 task로부터 값은 받지만 넘기지 않는다.
- 다음 task에게 null이 전달된다.
- 값을 받아서 action만 수행하는 경우 유용
thenApply[Async]
- Function을 파라미터로 받는다.
- 이전 task로부터 T 타입의 값을 받아서 가공하고 U타입의 값을 반환한다.
- 다음 task에게 반환했던 값이 전달된다.
- 값을 변형해서 전달해야 하는 경우 유용
thenCompose[Async]
- Function을 파라미터로 받는다.
- 이전 task로 부터 T타입을 받아서 가공하고 U타입의 ComletionStage를 반환한다.
- 반환한 CompletionStage가 done 상태가 되면 값을 다음 task에 전달한다.
- 다른 future를 반환해야하는 경우 유용
thenRun[Async]
- Runnable을 파라미터로 받는다.
- 이전 task로부터 값을 받지 않고 값을 반환하지 않는다.
- 다음 task에게 null이 전달된다.
- future가 완료되었다는 이벤트를 기록할 때 유용
exceptionally
- Function을 파라미터로 받는다.
- 이전 task에서 발생한 exception을 받아서 처리하고 값을 반환한다.
- 다음 task에게 반환된 값을 전달한다.
- future 파이프에서 발생한 에러를 처리할 때 유용