본문 바로가기

공부 기록/영상 후기

스레드 풀(thread pool)은 왜 쓰는 걸까요? 어떻게 쓰는게 잘 쓰는 걸까요? 지금 이 영상으로 스레드 풀! 깔끔하게 정리하시죠!

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 개수에 제한이 없다면

=> 스레드 풀의 큐가 사이즈 제한이 있는지 꼭 확인할 것!