❓ 만약 서버에 들어오는 요청마다 스레드를 새로 만들어서 처리하고 처리가 끝난 스레드는 버리는 식으로 동작한다면 어떤 문제가 발생할까?
스레드 생성에 소요되는 시간 때문에 요청 처리가 더 오래 걸리게 된다.
처리 속도보다 더 빠르게 요청이 늘어나면
-> 스레드 계속 생성(스레드 수 증가)
-> 컨텍스트 스위칭이 더 자주 발생
-> CPU 오버헤드 증가로 CPU time 낭비
-> 어느 순간 서버 전체가 응답 불가능 상태에 빠지게 된다.
메모리가 점점 고갈된다.
미리 스레드를 여러 개 만들어 놓고 재사용하는 방식
-> 스레드 생성 시간 절약
제한된 개수의 스레드를 운용
-> 스레드가 무제한 생성되는 것을 방지
여러 작업을 동시에 처리해아할 때
CPU의 코어 개수와 스레드 풀에 할당될 task의 성향에 따라 다르다.
큐에 요청이 무한정 쌓인다면 메모리를 고갈시킬 수 있기 때문에 큐 사이즈에 제한을 둬야 한다.
static 메서드로 다양한 형태의 thread pool을 제공
기본 설정으로는 queue size가 20억으로 사실상 제한이 없다.
size 제한 없는 큐는 상황에 따라서는 메모리를 고갈시키는 잠재적인 위험 요인이 될 수 있다.