Threadpool
title: 2025-09-02 author: 강병호 date: 2025-09-02 category: TIL/강병호/2025/08 layout: post —
다중 코어의 처리가 만연해지면서 수십, 수천 개의 스레드의 효율적인 응용을 위한 설계가 필요해짐.
그러나 스레드는 효율적이나 프로그램 정확도 처리와 같은 어려움이 존재, 즉, 개발자들이 처리해야할 일들의 가중
이를 해결하기 위해 암묵적 스레딩이라는 개념이 등장하였다.
이는 스레딩의 생성과 관리 책임을 개발자가 아닌 컴파일러, 라이브러리에 전가해버리는 것
이를 이용해 개발자는 스레드가 아닌 작업을 식별하고 라이브러리, 컴파일러에서 스레드 생성, 관리에 대한 세부적인 사항들을 결정한다.
즉, 응용 프로그램 개발자의 부담을 줄여주는 것.
Thread Pool 은 암묵적 스레딩 전략을 이용해 다중 코어를 활용하여 응용 프로그램을 설계하도록 돕는 것
다중 스레드 서버가 프로세스를 생성하는 것 보다 효율적이며 유행이 되었지만 다음의 문제가 존재
- 서비스시 마다 스레드를 생성하며 생성의 시간이 존재, 태스크 처리 후 폐기되기에 비효율적
- 모든 요청마다 새 스레드를 생성하는 문제로 무한정 생성 시 자원(CPU, 메모리)의 고갈 발생
이러한 문제를 해결하는 방식 중 하나인 Thread Pool
이러한 Thread Pool의 기반 아이디어는 다음과 같다.
서버 입장에선 다음의 변화
- 스레드 생성을 하지 않음
- 요청 받으면 스레드 풀에 제출하여 추가 요청을 대기
이렇게 제출된 작업의 경우 사용가능한 스레드가 존재할 경우 즉시 서비스 되고, 사용 가능한 스레드가 없으면 사용이 가능할 때 까지 대기하게 된다.
이를 통해 다음의 장점을 취한다.
- 스레드 생성 시간이 없이 미리 만들어 두기에 빠르게 서비스 가능
- 어느 때에나 스레드 풀의 스레드가 한계값이 존재하여 시스템 보호 및 효율성 증대
- 태스크 실행의 다양성을 가져온다. 실제로 태스크 생성 방법을 태스크처리로부터 분리하였기에 스케줄링 또한 가능하다.