- Thread Pool이란 Thread를 미리 만들어두는 공간이라고 할 수 있습니다.
- Thread는 동일한 메모리 영역에서 생성되고 관리되고 생성에 많은 리소스를 요구합니다.
- 모든 요청에 따라 Thread를 무제한적으로 생성한다면 Memory의 사용량이 증가하고 Context-Switching이 더 자주 발생하여 Program의 성능에 영향을 끼칠 수 있습니다.
- Thread Pool은 작업 처리에 사용되는 Thread의 개수를 정해두고 요청을 Queue를 통해 Task를 하나씩 Thread가 처리하도록 하는 역할을 합니다.
- 미리 만들어 둔 Thread를 재사용할 수 있기 때문에 Thread 생성에 발생하는 비용을 줄일 수 있고, Thread의 개수를 제한하기 때문에 무제한적으로 Thread가 생성되는 것을 방지하고 작업처리 요청이 많아지더라도 Thread의 전체 개수는 동일하므로 시스템의 성능이 급격히 저하되지 않습니다.
- MaximunPoolSize를 이용해서 최대 Thread의 개수를 의미하며 항상 이 숫자를 유지하는 것이 아니라 KeppAliveTime동안 요청이 없다면 CorePoolSize만큼만 유지시킵니다.
- 예를 들 수 있는것이 웹 서버이다. 동시적인 요청이 들어오고 동시적은 응답을 처리하는 특징을 가지고 있기 때문에 많은 웹 서버들이 Thread Pool을 사용하고 있습니다.
- Thread Pool은 너무 많아도 적어도 좋지 않기때문에 적절한 수준을 유지해야 합니다. 너무 많은 경우 의미없이 메모리만 차지하는 경우가 있을 수 있고, 너무 적게 유지할 경우 TPS가 떨어져 성능에 비효울적입니다.
- Java는 Thread Pool을 생성하고 사용할 수 있도록, Executors 클래스와 ExecutorService 인터페이스를 제공하고 있습니다. 이것을 활용하면 Thread Pool을 생성하여 병렬처리를 할 수 있습니다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
ExecutorService (0) | 2023.02.16 |
---|---|
Executor (0) | 2023.02.15 |
Thread in Java (0) | 2023.02.07 |
함수형 인터페이스 (Functional Interface) (1) | 2023.01.31 |
람다식 (Lamda Expression) (0) | 2023.01.31 |
댓글