사용자 도구

사이트 도구


java:8:completable_future

Java 8 CompletableFuture

Thread Pool (Executor)

  • supplyAsync 등의 메소드 호출시 쓰레드 풀을 명시하지 않으면 Java ForkJoinPoolcommonPool() 이 사용된다.
  • 개발자가 쓰레드 풀을 제어할 수 없다는 것은 나중에 문제가 될 수 있다.
  • 따라서, 항상 Java ExecutorService 를 명시적으로 사용하여 쓰레드 풀을 지정하도록 한다.

ParallelStream vs. CompletableFuture

  • ParallelStream : I/O가 포함되지 않은 계산 중심의 동작을 실행할 때는 스트림 인터페이스가 가장 구현하기 간다하며 효율적일 수 있다(모든 스레드가 계산 작업을 수행하는 상황에서는 프로세서 코어 수 이상의 쓰레드를 가질 필요가 없다).
  • CompletableFuture : 반면 작업이 I/O를 기다리는 작업을 병렬로 실행할 때는 CompletableFuture가 더 많은 유연성을 제공하며 대기/계산(W/C)의 비율에 적합한 스레드 수를 설정할 수 있다. 특히 스트림의 게으른 특성 때문에 스트림에서 I/O를 실제로 언제 처리할 지 예측하기 어려운 문제도 있다.

여러 CompletableFuture를 하나로 합쳐주기

참조

java/8/completable_future.txt · 마지막으로 수정됨: 2020/11/09 11:47 저자 kwon37xi