[CS/운영체제] 멀티스레드와 동시성 - 42부

황제연·2025년 8월 13일
0

CS학습

목록 보기
165/193
post-thumbnail

Executor의 다양한 스레드 풀 관리 전략

ThreadPoolExecutor를 사용하면 이전에 살펴봤던 스레드 풀에 사용되는 다양한 속성을 조정할 수 있습니다

이런 속성을 잘 조정하면 커스텀한 스레드 풀 전략을 사용할 수 있습니다
자바는 Executors 클래스를 통해 3가지 기본 전략을 제공합니다

  • newSingleThreadPool(): 단일 스레드 풀 전략
  • newFixedThreadPool(nThreads): 고정 스레드 풀 전략
  • newCachedThreadPool(): 캐시 스레드 풀 전략

단일 스레드 풀 전략

단일 스레드 풀 전략을 기본적으로 스레드 풀에 스레드 1개만 사용합니다
또한 LinkedBlockingQueue를 사용해서 큐 사이즈에 제한이 없지만
스레드를 적게 사용하기 떄문에 주로 간단히 사용하거나, 테스트 용도로 사용합니다

new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())

고정 풀 전략

스레드 풀에 nThreads 만큼의 기본 스레드를 생성하며, 초과 스레드는 생성하지 않습니다
동일하게 LinkedBlockingQueue를 사용해서 큐 사이즈에 제한이 없습니다

스레드 수가 고정되어있기 때문에 CPU, 메모리 리소스에 대한 어느정도 예측이 가능합니다

new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnalbe>())

특징

스레드 수가 고정되어있기 떄문에 CPU, 메모리 리소스가 어느정도 예측 가능한 안정적인 방식입니다
큐 사이즈 제한도 없어서 작업을 많이 담아도 문제가 없습니다

주의할점

하지만 사용자가 늘어나게 된다면, 초과 스레드를 만들 수 없기 때문에 대기시간이 늘어나서
전체 처리시간이 줄어드는 문제가 발생합니다
고정 풀 전략은 실행되는 스레드 수가 고정되어 있어서 사용자가 늘어나도 CPU, 메모리 사용량이 확 늘어나지는 않습니다

따라서 서버의 자원은 여유가 있는데, 사용자만 점점 느려지는 문제가 발생할 수 있습니다

참고

  • 김영한의 실전 자바 - 고급 1편
profile
Software Developer

0개의 댓글