반응형

ExecutorService 2

CompletableFuture - 비동기와 병렬은 다르다

Thread Pool을 사용하다 보면 자연스럽게 이런 요구가 생긴다. “이 작업이 끝난 뒤, 다음 작업을 이어서 실행하고 싶다” Java는 이를 위해 CompletableFuture를 제공한다.하지만 CompletableFuture는 종종 “비동기 마법 도구”처럼 사용되고, 그 결과는 예상과 다른 성능 저하나 복잡한 동시성 버그로 이어진다.이 글에서는 CompletableFuture가 무엇을 보장하는지, 그리고 무엇을 보장하지 않는지를 공식 문서 기준으로 정리한다.1. 비동기와 병렬은 같은 개념이 아니다CompletableFuture를 이해하기 전에 반드시 구분해야 할 개념이 있다.비동기(Asynchronous)병렬(Parallel)비동기는 “작업이 끝날 때까지 기다리지 않는다” 는 의미다.병렬은 “여러..

Thread Pool은 왜 문제를 만드는가? - ExecutorService의 책임

멀티스레드 환경에서 스레드를 직접 생성하고 관리하는 것은 거의 항상 잘못된 선택이다.그래서 Java는 Thread Pool과 ExecutorService를 제공한다.하지만 아이러니하게도, 실무에서 발생하는 많은 동시성 장애의 원인은 바로 이 Thread Pool이다.이 글에서는 Thread Pool이 왜 필요한지부터, 왜 문제가 되기 쉬운지, 그리고 ExecutorService가 무엇을 보장하고 무엇을 보장하지 않는지를 공식 문서 기준으로 정리한다.1. 왜 Thread Pool이 필요한가?Thread를 요청마다 생성하는 모델은 다음과 같은 문제를 가진다.Thread 생성 비용이 크다동시에 생성 가능한 Thread 수에는 한계가 있다OS 자원을 쉽게 고갈시킨다Thread Pool의 목적은 단순하다. 미리 ..

반응형