song960530 / foryou-family

0 stars 0 forks source link

Thread Pool 기본 지식과 Blocking, Non-Blocking 이해 #118

Open song960530 opened 1 year ago

song960530 commented 1 year ago

Thread Pool 기본 지식과 Blocking, Non-Blocking 이해

Thread Pool을 효율적으로 조정하기 위해선 Thread Pool의 동작 방식과 내부 처리되는 방식에 대한 기본 지식이 필요하다.


스프링 부트 내장 Tomcat 역사


Tomcat의 Thread Pool 동작 Flow

  1. Tomcat 부팅 시 다중 요청 처리를 위해 Thread Pool을 생성한다
  2. 유저 요청(HttpServletRequest)가 들어오면 Thread Pool의 Thread를 하나씩 할당한다
  3. 할당 받은 Thread에서 Dispatcher Servlet을 거쳐 요청을 처리한다
  4. 작업 수행 후 Thread Pool로 반환된다


Thread Pool의 기본 동작 Flow

  1. 첫 task가 들어오면 core size만큼 thread 생성
  2. task(Connection, Server socket에서 accept한 소켓 객체)가 task queue에 저장
  3. idle(유휴, 대기)상태인 Thread가 있으면 task queue에서 polling하여 Thread에 작업 할당 및 처리 3-1. idle 상태인 thread가 없으면 task queue에서 대기 3-2. task queue가 가득 차게되면 thread 생성 3-3. task queue가 가득 차있고, thread도 최대 사이즈라면 이후 요청에 대해선 connection-refused 오류 반환
  4. task 완료 시 Thread는 다시 idle상태로 돌아감
  5. 만약 task queue가 비어있고 core size 이상의 thread가 생성되어있으면 thread를 소멸

ps. Connection, Server socket에서 accept한 소켓 객체 -> 자바 소켓 프로그래밍의 서버와 클라이언트가 연결되는 개념을 이해하면 됨


스프링 부트 내장 Tomcat Default 값


Tomcat이 Thread Pool을 사용하게 된 이유


Thread Pool 설정 시 유의 사항


적정 Thread 계산 법

하지만 만약 DB Connection Pool이나 JMS(자바 메세지 서비스) 등 어플리케이션 외의 영역을 고려한다면


리틀의 법칙을 이용한 병렬 work 스레드의 수를 계산 (TPS)



여기부턴 Blocking, Non-Blocking 내용

Blocking, Non-Blocking I/O와 연결되는 이유


BIO(Blocking I/O) Connector


NIO(Non-Blocking I/O) Connector


그럼 Blocking I/O, Non-Blocking I/O가 무엇이냐 (위 내용들은 해당 Model을 사용한 방식임 헷갈리지 말자)

Blocking I/O Model


Non-Blocking I/O Model


I/O 이벤트 통지 모델이란


Synchronouse Model (동기 모델)


Asynchronous Model (비동기 모델)


Blocking, Non-Blocking, Synchronous, Asynchronous 정리 그림

image



참조 사이트

jincrates commented 1 year ago

미쳤다