스레드 풀
JeongSeulho
2023년 02월 11일
준비중...
클립보드로 복사
Thread per Request model
- 요청마다 하나의 스레드를 생성하여 요청을 처리
- 요청마다 스레드를 생성하고 삭제하는 과정이 비효율적
- 많은 요청에 너무 많은 스레드 생성 시 컨텍스트 스위칭 비용이 커짐
- 많아지는 스레드는 메모리 부족 문제 발생
Thread Pool
- 스레드를 미리 만들어놓고 재사용
- 사용시 가져가고 반납하는 식으로 운용
- 제한된 스레드 개수로 운용 => 무제한 스레드 증가 방지
- task를 subtask로 나누어 동시에 처리에도 사용
- 1부터 100까지 더하는 작업은 순서가 상관없이 동시 실행 가능
- 1부터 50까지 더하는 작업과 51부터 100까지 더하는 작업은 2개의 스레드에서 병렬 실행
스레드 풀의 스레드의 적정 개수는
CPU bound인 경우 코어 수 만큼 혹은 코어 수 + 1, 2 I/O bound인 경우 코어 수 * 1.5, 2, 3 등 다양
Thread Pool의 큐 사이즈
- 스레드 풀에서 스레드 사용을 기다리는 큐가 존재
- 해당 큐의 사이즈 제한이 없다면 메모리 부족 문제 발생 가능성
자바와 파이썬의 스레드 풀
ExecutorService threadPool = Executors.newFixedThreadPool(10);
thread_pool = ThreadPoolExecutor(max_workers=10)
두 언어에서 스레드 풀의 큐 사이즈는 무한임
따라서 메모리 부족 문제 발생 가능성이 있음