본문 바로가기

Programming/JAVA

멀티 스레드(9) - 스레드 풀 1 : 스레드 풀의 정의

 

 

 

 

스레드를 활용한 병렬 작업이 증가하게 되면, 어플리케이션 성능이 저하될 수 밖에 없습니다. 스레드 생성과 스케줄링으로 인해서 CPU 사용량이 늘어나고, 메모리의 사용량이 늘어나기 때문입니다. 그래서 스레드 사용의 폭증을 막기 위해서 스레드 풀(Thread Pool)을 사용하게 됩니다. 

 

스레드 풀은, 

 - 작업 처리에 사용되는 스레드 최대 개수를 제한해 놓고

 - 작업 큐(Queue)에 들어온 작업들을, 각각의 스레드가 하나씩 맡아서 처리합니다.

 - 할당 작업 처리가 끝난 스레드는, 다시 작업 큐에서 새로운 작업을 가져와 처리합니다.

 

이런 구조이기 때문에, 만약에 작업 요청이 갑작스럽게 폭증한다고 해도, 스레드의 개수는 정해져있기 때문에 스레드 증가로 인한 어플리케이션 성능 저하가 발생하지 않는 것입니다. 

 

 

 


 

 

자바에서의 스레드풀은 java.util.concurrent 패키지에서 ExecutorService 인터페이스와 Executors 클래스를 제공합니다. 즉, Executors의 다양한 static 메서드를 이용해 ExecutorService의 구현 객체를 만들 수 있는데, 이것이 스레드풀입니다.

 

아래 도식화된 구조를 통해, ExecutorService 동작 방식을 확인해 보겠습니다.