https://youtu.be/B4Of4UgLfWc?si=wJERzcFBCPfa1ME4
만약 Thread per request model의 동작 방식이 서버에 들어오는 요청마다 스레드를 새로 만들어서 처리하고 처리가 끝난 스레드는 버리는 식으로 동작한다면 어떤 문제점이 있을까?
=> 스레드 생성에 소요되는 시간 때문에 요청 처리가 더 오래 걸림
=> 처리 속도보다 더 빠르게 요청이 늘어나면 -> 스레드가 계속 생성(스레드 수 증가) -> 컨텍스트 스위칭이 더 자주 발생 -> CPU 오버헤드 증가로 CPU time 낭비 -> 어느 순간 서버 전체가 응답 불가능 상태에 빠짐
Thread pool
- 미리 스레드를 여러 개 만들어 놓고 재사용 => 스레드 생성 시간 절약
- 제한된 개수의 스레드를 운용 => 스레드가 무제한으로 생성되는 것을 방지
사례
- 여러 작업을 동시에 처리해야 할 때
- thread per request 모델
- task를 subtask로 나누어서 동시에 처리
- 순서 상관없이 동시 실행이 가능한 task 처리
사용 팁
1. 스레드 풀에 몇 개의 스레드를 만들어두는 게 적절한가?
=> CPU의 코어 개수와 task의 성향에 따라 다름
=> CPU bound task라면 코어 개수 만큼, 혹은 그보다 몇 개 더 많은 정도
=> IO bound task라면 코어 개수보다 1.5배? 두 배? 세 배? 경험적으로 찾아야 함
2. 스레드 풀에서 실행될 task 개수에 제한이 없다면
=> 스레드 풀의 큐가 사이즈 제한이 있는지 꼭 확인할 것!
'공부 기록 > 영상 후기' 카테고리의 다른 글
관계형 데이터 모델링 - 7.1. 물리적 데이터 모델링 (0) | 2023.09.08 |
---|---|
동기화(synchronization), 경쟁 조건(race condition), 임계 영역(critical section)을 자세하게 설명합니다! 헷갈리시는 분들 꼭 보세요! (0) | 2023.09.01 |
cpu bound, io bound 의미를 설명합니다! 이에 따른 스레드 개수를 정하는 팁도 알려드립니다! (0) | 2023.08.26 |
비동기 프로그래밍, 비동기 I/O, 비동기 커뮤니케이션.. 비동기(asynchronous)라는 .. 참 많이 사용하는데요~ 각 맥락에 따른 의미를 설명합니다~ (0) | 2023.08.07 |
[10분 테코톡] 카프카의 탐색 알고리즘 (0) | 2023.08.04 |