어플리케이션에 사용자의 요청이 들어오면 각 사용자마다의 요청을 처리하기 위해 쓰레드를 생성한다. 요청에 대한 로직을 수행하고 더이상 쓰레드가 필요하지 않게 되면 사용한 쓰레드를 제거한다. 이는 사용자의 요청이 많아지면 많아질 수록 늘어나는 작업일 것이다. 프로세스에 비해서 생성하는 자원이 덜 든다고는 하지만 요청이 많아지면 이 역시 부담이 될 수밖에 없다.

쓰레드를 생성하고 제거하는 과정에서 발생하는 비용을 줄이기 위해 미리 쓰레드를 일정량 만들어두고, 사용하는 방법을 채택하는 것이 Thread Pool(쓰레드 풀) 이다.

Untitled

어플리케이션에서 사용하고자 하는 쓰레드들을 미리 쓰레드 풀에 생성해둔다. 요청이 들어오면 미리 생성해둔 쓰레드를 사용하고, 요청에 대한 결과값을 어플리케이션에게 반환한다.

자바에서는 쓰레드 풀을 사용하기 위해 java.util.concurrent 에서 ExecutorService 인터페이스와 Executor 클래스를 제공하고 있다. Executor 의 다양한 정적 메서드를 통해서 ExecutorService 구현 객체를 만들 수 있으며, 그것이 바로 쓰레드 풀이다.

https://limkydev.tistory.com/55#recentEntries

https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html