IT 기술 및 용어/IT 면접 관련 지식

자바의 쓰레드풀(ThreadPoolExecutor)의 원리

방탄승 2024. 3. 7. 17:10

자바 쓰레드(Thread) 사용


 

1. 기본 개념

  • 멀티유저 지원:
    • 서버는 동시에 여러 사용자가 접속 가능한 구조.
    • 자바는 운영체제의 쓰레드를 활용하여 다중 접속을 지원.
  • 문제점:
    • 요청마다 새로운 쓰레드를 생성하면 운영체제 자원이 고갈될 위험.
    • 동시 접속 사용자가 많아지면 서버 다운 가능성 증가.
    •  

2. Thread Per Request Model - API 요청 방식

  • 정의:
    • 요청(Request)마다 하나의 쓰레드를 생성하여 처리하는 방식.
    • Request와 Thread가 1:1 매칭.
  • 문제점:
    1. 쓰레드 생성 소요 시간 → 요청 처리 지연.
    2. 요청 증가 → 쓰레드 수 증가 → 과도한 Context Switching 발생.
    3. CPU 오버헤드 증가 및 CPU 시간 낭비.
    4. 메모리 고갈 및 서버 응답 불가 상태 초래.


위와 같은 문제를 해결하기 위해 쓰레드 풀(ThreadPool)이라는 개념이 도입됨.

 

쓰레드 풀(ThreadPool)


1. 기본 개념

 

  • 관리 및 생성:
    • 미리 일정 개수의 쓰레드를 생성하여 관리하는 방법.
  • 장점:
    1. 쓰레드 생성/삭제 오버헤드 감소.
    2. 자원 효율성 및 성능 향상.
    3. 동시에 처리 가능한 작업 개수 제한 가능.
    4. 무제한 쓰레드 생성 방지.
  • 사용 사례:
    1. Thread Per Request Model.
    2. SubTask로 나뉘어 동시 처리 가능한 작업.
    3. 순서에 상관없이 동시 실행 가능한 작업.

2. 쓰레드 풀(ThreadPool) 활용 팁

(1) 적정 Thread 개수

  • CPU-Bound Task:
    • CPU 코어 개수만큼 또는 약간 초과.
  • I/O-Bound Task:
    • CPU 코어 개수의 1.5~3배.
    • 경험적으로 최적화 필요.

(2) Task 개수 제한

  • 큐 크기 제한 확인:
    • 무제한 큐 → 메모리 고갈 위험.
  • 해결 방안:
    1. 큐 크기 제한.
    2. 제한 초과 요청은 처리 제외.

(3) ThreadPoolExecutor

  • 자바에서 ThreadPool 제공을 위한 주요 클래스임.

ThreadPoolExecutor 주요 개념

  • 초기 스레드 수:
    • ExecutorService 생성 시 기본 생성되는 스레드 수.
  • 코어 스레드 수:
    • 사용되지 않은 스레드를 제거할 때 최소 유지 개수.
  • 최대 스레드 수:
    • 쓰레드 풀에서 관리 가능한 최대 스레드 수.

 

  - 쓰레드 풀 생성 (ThreadPool Create)

메소드명(매개 변수)
초기 스레드 수
코어 스레드 수
최대 스레드 수
newCachedThreadPool()
0
0
Intger.MAX_VALUE
newFixedThreadPool(int nThreads)
0
nThreads
nThreads

 

 

  - 쓰레드 풀 종료 (ThreadPool Shutdown)

리턴 타입
메소드명
설명
void
shutdown()
현재 작업과 큐 대기 작업 완료 후 종료
List<Runnable>
shutdownNow()
현재 작업 중단 후 큐에 남은 작업 목록 반환
boolean
awaitTermination()
지정 시간 내 작업 완료 시 true, 아니면 작업 중단 후 false 반환

 

  - 쓰레드 풀 작업 (ThreadPool Execute)

메소드명
설명
execute()
쓰레드 풀에서 작업 실행

 

 

ThreadPool의 동작을 GIF로 표현한 그림