042 Threadpool

강의 메모 - 스레드 풀 이해와 구현 #

개요 #

  • 스레드 풀 (Thread Pool) 은 다수의 스레드를 미리 생성하고 관리하여 작업을 효율적으로 처리하는 디자인 패턴이다
  • 자바에서는 스레드 풀을 사용할 수 있는 Executor 프레임워크를 제공하고 있다

스레드 풀은 왜 필요한가 #

img.png

스레드 풀을 구현할 때 필요한 핵심 요소는 무엇인가 #

img_1.png

스레드 풀 구조 #

img_2.png

  • 작업을 스레드 풀에 등록하면 스레드 풀은 큐에 작업을 저장한다
  • 미리 생성된 스레드는 큐로부터 작업을 하나씩 가져가고 작업을 진행한다
  • 작업을 완료하면 다음 작업을 할당받기 위해 시도한다

img_3.png

  • 스레드가 할당 받을 작업이 없으면 요청이 들어올 때 까지 계속 대기한다 (wait)
    • 할당 받을 작업이 올때까지

img_4.png

  • 스레드가 모두 작업 중이고 큐에 작업이 존재할 경우 스레드를 추가 생성한다
    • 가용할 수 있는 최대 스레드 개수만큼 생성 가능하기 때문에 추가 생성할 수 있음
  • 일반적으로 스레드 생성 개수는 기본 개수와 최대 개수로 제한을 둔다
  • 만약 Queue에 계속해서 작업이 들어오는데 Thread가 모두 working 중이면 Queue에 작업이 계속 쌓이게되어 쓰레드 풀이 예외를 발생시킬 수 있다.