개요

스레드 풀thread pool이란 미리 일정 개수의 스레드를 생성하여 풀에 보관해 두고, 작업이 발생할 때마다 사용 가능한 스레드를 할당하여 실행하는 기술이다.

작업이 끝난 스레드는 제거하지 않고 다시 풀로 반환하여 반복적으로 재사용한다.

필요성

스레드를 무한정으로 구현하는 방식으로 멀티 스레드를 구현하는 것은 다음과 같은 문제가 있다.

  1. 스레드의 생성 비용이 크기 때문에, 요청에 대한 응답 시간이 늘어난다.
  2. Thread가 많아질수록 차지하는 메모리 크기가 커지고, 컨텍스트 스위칭이 자주 발생한다. 메모리 문제가 발생할 수 있고, CPU 오버헤드가 증가한다.

이러한 문제를 해결하기 위한 방법이 바로 스레드 풀이다.

스레드를 재사용하기 때문에 1) 생성 비용이 크다는 문제를 해결할 수 있고, 풀에 저장되어 있는 스레드만을 사용하기 때문에 2) 메모리 및 오버헤드 문제를 해결할 수 있다.

동작 방식

스레드 풀은 이하 두 가지로 구성된다.

  1. 스레드
  2. 작업 큐task queue

작업 요청이 들어오면 먼저 작업 큐에 저장된다. 풀에서 사용 가능한 스레드는 큐에서 작업을 하나씩 꺼내어 실행한다. 만약 큐가 가득 차고 현재 실행 중인 스레드 수가 최대치에 도달해 있다면, 새 작업은 거부되거나, 사용 가능한 스레드가 생길 때까지 대기하는 등, 정책에 따라 처리된다.

참고자료