DB

스레드 풀 (Thread Pool)

주인장 꼬비 2024. 9. 9. 01:08

스레드풀(Thread Pool)이란?

스레드풀(Thread Pool)은 여러 작업을 동시에 처리할 수 있도록 미리 생성된 스레드의 모음을 말함. 이 개념은 멀티스레딩 환경에서 자주 사용되며, 자원을 효율적으로 사용하고 작업 성능을 향상시키는 데 도움이 됨.

왜 스레드풀이 필요한가?

멀티스레딩 환경에서는 여러 작업을 동시에 처리할 수 있지만, 매번 새로운 스레드를 생성하고 소멸시키는 과정은 비용이 많이 듬. 스레드를 생성할 때마다 시스템 자원이 소비되고, 작업이 끝날 때마다 해당 스레드를 삭제해야 하기 때문.

스레드풀은 이를 해결하기 위해 일정한 개수의 스레드를 미리 생성해두고, 필요할 때 이 스레드를 사용함. 작업이 끝난 후에도 스레드를 삭제하지 않고, 다시 사용할 수 있도록 대기시켜 둠.. 이렇게 함으로써 스레드 생성과 소멸에 드는 비용을 줄이고, 자원 낭비를 막을 수 있음.

스레드풀의 동작 원리

  1. 스레드 생성: 프로그램이 시작될 때, 지정된 개수만큼 스레드를 미리 생성함.
  2. 작업 대기열: 작업이 들어오면 해당 작업은 대기열에 추가됨.
  3. 작업 할당: 대기 중인 스레드가 있으면, 작업 대기열에서 작업을 가져와 해당 스레드에 할당하여 실행함.
  4. 재사용: 작업이 완료된 스레드는 새로운 작업이 들어올 때까지 대기 상태로 돌아감.

스레드풀의 장점

  1. 성능 향상: 매번 스레드를 생성하고 삭제하는 비용이 줄어들어 프로그램 성능이 향상됨.
  2. 자원 관리: 한정된 스레드 수를 사용하므로, 스레드가 과도하게 생성되어 시스템 자원을 낭비하는 일을 방지함.
  3. 간편한 사용: 복잡한 멀티스레딩 작업을 쉽게 관리할 수 있도록 도와줌.

스레드풀의 단점

  • 최대 스레드 수 제한: 스레드풀의 크기가 제한되어 있으면, 많은 작업이 들어올 경우 대기 시간이 길어질 수 있음.
  • 복잡한 동기화 문제: 잘못된 동기화로 인해 교착 상태(Deadlock)가 발생할 수 있음