IT 기술 및 용어/IT 면접 관련 지식
자바의 쓰레드풀(ThreadPoolExecutor)의 원리
방탄승
2024. 3. 7. 17:10
자바 쓰레드(Thread) 사용
1. 기본 개념
- 멀티유저 지원:
- 서버는 동시에 여러 사용자가 접속 가능한 구조.
- 자바는 운영체제의 쓰레드를 활용하여 다중 접속을 지원.
- 문제점:
- 요청마다 새로운 쓰레드를 생성하면 운영체제 자원이 고갈될 위험.
- 동시 접속 사용자가 많아지면 서버 다운 가능성 증가.
2. Thread Per Request Model - API 요청 방식
- 정의:
- 요청(Request)마다 하나의 쓰레드를 생성하여 처리하는 방식.
- Request와 Thread가 1:1 매칭.
- 문제점:
- 쓰레드 생성 소요 시간 → 요청 처리 지연.
- 요청 증가 → 쓰레드 수 증가 → 과도한 Context Switching 발생.
- CPU 오버헤드 증가 및 CPU 시간 낭비.
- 메모리 고갈 및 서버 응답 불가 상태 초래.
위와 같은 문제를 해결하기 위해 쓰레드 풀(ThreadPool)이라는 개념이 도입됨.
쓰레드 풀(ThreadPool)
1. 기본 개념
- 관리 및 생성:
- 미리 일정 개수의 쓰레드를 생성하여 관리하는 방법.
- 장점:
- 쓰레드 생성/삭제 오버헤드 감소.
- 자원 효율성 및 성능 향상.
- 동시에 처리 가능한 작업 개수 제한 가능.
- 무제한 쓰레드 생성 방지.
- 사용 사례:
- Thread Per Request Model.
- SubTask로 나뉘어 동시 처리 가능한 작업.
- 순서에 상관없이 동시 실행 가능한 작업.
2. 쓰레드 풀(ThreadPool) 활용 팁
(1) 적정 Thread 개수
- CPU-Bound Task:
- CPU 코어 개수만큼 또는 약간 초과.
- I/O-Bound Task:
- CPU 코어 개수의 1.5~3배.
- 경험적으로 최적화 필요.
(2) Task 개수 제한
- 큐 크기 제한 확인:
- 무제한 큐 → 메모리 고갈 위험.
- 해결 방안:
- 큐 크기 제한.
- 제한 초과 요청은 처리 제외.
(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()
|
쓰레드 풀에서 작업 실행
|