THREAD POOL

Rust 스레드 풀 정책

작업을 worker에게 나누는 구조만으로는 부족하다. 큐가 꽉 찼을 때, 종료할 때, worker가 panic할 때, 요청이 몰릴 때의 정책을 함께 설계해야 한다.

01

작업 제출

execute가 closure를 job으로 포장해 channel queue에 넣는다.

producer
02

worker 수신

각 worker thread가 receiver를 잠그고 job을 하나씩 꺼낸다.

consumer
03

작업 실행

job이 panic할 수 있으므로 worker 생존/재시작 정책을 정한다.

isolation
04

종료 처리

drop에서 sender를 닫고 worker join으로 남은 스레드를 회수한다.

graceful shutdown
unbounded queue
메모리 폭증 위험 요청이 처리 속도보다 빠르면 큐가 계속 커진다.
backpressure 필요
bounded queue
제출자가 대기/실패 try_send 실패, block, drop 중 어떤 정책인지 API에 드러낸다.
capacity
panic job
worker thread 종료 가능 catch_unwind나 supervisor로 worker 수를 유지할지 결정한다.
resilience
shutdown
남은 job 처리 여부 drain 후 종료할지 즉시 중단할지 서비스 의미에 맞춘다.
graceful vs immediate

구현 전 질문

작업 크기 CPU bound면 worker 수를 core 기준으로, IO bound면 대기 시간을 고려해 잡는다.
취소 오래 걸리는 작업을 취소할 수 있는지 cooperative flag를 둔다.
관측 queue length, active worker, job latency를 지표로 남긴다.