Tech

Diary

Lecture

About Me

개발중

스레드 풀

JeongSeulho

2023년 02월 11일

준비중...
클립보드로 복사

Thread per Request model

  • 요청마다 하나의 스레드를 생성하여 요청을 처리
  • 요청마다 스레드를 생성하고 삭제하는 과정이 비효율적
  • 많은 요청에 너무 많은 스레드 생성 시 컨텍스트 스위칭 비용이 커짐
  • 많아지는 스레드는 메모리 부족 문제 발생

Thread Pool

  • 스레드를 미리 만들어놓고 재사용
  • 사용시 가져가고 반납하는 식으로 운용
  • 제한된 스레드 개수로 운용 => 무제한 스레드 증가 방지
  • task를 subtask로 나누어 동시에 처리에도 사용
    • 1부터 100까지 더하는 작업은 순서가 상관없이 동시 실행 가능
    • 1부터 50까지 더하는 작업과 51부터 100까지 더하는 작업은 2개의 스레드에서 병렬 실행

Image

스레드 풀의 스레드의 적정 개수는
CPU bound인 경우 코어 수 만큼 혹은 코어 수 + 1, 2 I/O bound인 경우 코어 수 * 1.5, 2, 3 등 다양

Thread Pool의 큐 사이즈

  • 스레드 풀에서 스레드 사용을 기다리는 큐가 존재
  • 해당 큐의 사이즈 제한이 없다면 메모리 부족 문제 발생 가능성

Image

자바와 파이썬의 스레드 풀

copy
ExecutorService threadPool = Executors.newFixedThreadPool(10);
copy
thread_pool = ThreadPoolExecutor(max_workers=10)

두 언어에서 스레드 풀의 큐 사이즈는 무한임
따라서 메모리 부족 문제 발생 가능성이 있음