스레드 풀 (Thread Pool)

category 백엔드/프로그래밍 기법 2023. 7. 11. 06:56
728x90
반응형

Thread Per Request 모델

Thread Per Request 모델은 웹 서버에서 요청이 들어올 때마다 새로운 스레드를 생성하여 해당 요청을 처리하는 방식이다. 각 요청은 독립적으로 실행되기 때문에 동시에 여러 요청을 처리할 수 있다.

간단한 구현

각 요청에 대해 새로운 스레드를 생성하기 때문에 구현이 비교적 간단하다. 스레드는 일반적으로 운영체제에서 제공하는 기능을 사용하여 생성 및 관리할 수 있다.

동시성

Thread Per Request 모델은 여러 스레드를 통해 동시에 요청을 처리할 수 있으므로 동시성을 지원한다. 이는 대규모 트래픽을 처리하는 데 유용할 수 있다.

 

 

이렇게 계속 요청 들어올때마다 스레드를 생성하게 된다면? 

컨텍스트 스위칭 오버헤드

스레드는 자원을 공유하면서 실행되기 때문에 스레드 간의 컨텍스트 스위칭이 발생합니다. 이는 스레드 수가 증가할수록 오버헤드가 커질 수 있으며, 서버의 성능에 영향을 미칠 수 있다.

자원 소비

각 스레드는 메모리와 CPU 시간을 소비하므로, 대량의 동시 요청이 발생할 경우 서버 자원을 소비하는 문제가 발생할 수 있다. 

 

 

 

그래서 미리 생성해놓고 재사용하는 방법을 고려해보면 어떨까?

 

스레드 풀 (Thread Pool)

위에 같은 단점으로 인하여 나오게 된 것이 스레드 풀 (Thread Pool)이다.

스레드 풀은 동시성 작업을 효율적으로 처리하기 위해 사용된다. 스레드풀은 다수의 작업을 동시에 처리하면서 스레드의 수를 제한함으로써 스레드 생성 및 관리 비용을 절감하고, 너무 많은 스레드가 동시에 실행되는 상황을 피할 수 있다.

스레드 생성

스레드풀은 미리 정의된 수의 스레드를 생성한다. 일반적으로 스레드의 수는 시스템 자원과 작업 부하에 따라 조정된다. 생성된 스레드는 일시적으로 대기 상태로 들어간다.

작업 큐 

작업 큐는 스레드풀에 제출된 작업들을 저장하는 공간이다. 작업은 큐에 저장되고, 사용 가능한 스레드가 작업을 가져와 실행한다.

작업 제출

작업을 스레드풀에 제출하여 실행을 요청할 수 있습니다. 제출된 작업은 작업 큐에 저장되며, 사용 가능한 스레드가 작업을 가져와 실행합니다.

작업 실행

스레드풀은 작업 큐에서 작업을 가져와 사용 가능한 스레드에 할당하여 실행한다. 한 번에 하나의 작업만 처리하며, 작업이 완료되면 해당 스레드는 다음 작업을 처리할 수 있도록 다시 대기 상태로 들어간다.

스레드 재사용

작업이 완료되면 스레드는 다음 작업을 처리하기 위해 재사용된다. 이를 통해 스레드의 생성 및 소멸 비용을 줄이고, 시스템 리소스를 효율적으로 활용할 수 있다.

 

728x90
반응형