[ Java.Thread-3. Thread Pool-3 (기본개념) ]


1. 정의

   - 자바의 쓰레드는 CPU를 최대한 사용해서 많은 업무를 동시에 처리할수 있도록 도와준다. 그런데 이 쓰레드의 생성에는 약간의 시간과 메모리가 필요하다. JVM은 쓰레드의 생성 개수를 제약하지 않기 때문에 계속적으로 쓰레드를 생성하게 된다면 결과적으로 성능저하와 메모리 고갈의 문제가 생길수 있다. 

 

   - 이렇게 무제한 적인 쓰레드의 생성을 막기 위해서,  쓰레드풀(Thread Pool)이라는 쓰레드 관리 방식이  사용되고 있다. 쓰레드 풀이란 쓰레드를, 허용된 갯수 안에서만 사용할수 있도록 스스로 제약하는 방식이다.  이것은 JVM의 옵션등으로 제어할 수는 없고, 어플리케이션이 선택적으로 사용하는 방법이다.


   - 쓰레드풀 방식을 사용하는 대표적인 소프트웨어는 Tomcat같은 웹서버들이다. 웹서버들은 동시에 많기는 수천~수만의 요청이 들어올수 있는데, 이때마다 쓰레드를 생성하는 것은 JVM의 메모리를 급속하게 소비시키며 성능에도 저하가 발생하게 된다. 이럴때 최대 쓰레드 갯수를 지정해 놓으면 쓰레드 갯수 이상의 HTTP 요청에 대해서는 처리하지 않고  기다렸다가 놀고 있는 쓰레드가 생기면 그때 HTTP 요청을 쓰레드를 통해 처리한다. 



2. 쓰레드 풀의 구조

   쓰레드 풀은 크게 3가지 부분으로 나눈다. 


   1) Task의 요청을 받는 Queue부분

   2) 실제 쓰레드를 생성하고 관리하는 하는 manager 부분

   3) Queue 안에서 Task를 꺼내와서 실제 쓰레드 위에서 동작시켜 결과를 얻는 부분


   [ 풀 구조 - 이미지]



Posted by 농부지기
,