RUST · THREADPOOL

ThreadPool 종료 신호 플로우

스레드풀을 안전하게 종료하려면 작업 채널을 닫아 더 이상 일이 오지 않음을 알리고, 각 워커가 루프를 빠져나온 뒤 join되도록 해야 합니다.

Drop 순서

shutdown
ThreadPool drop풀 소유자가 사라질 때 종료 절차가 시작됩니다.
sender.take()Option 안의 sender를 꺼내 drop해 채널을 닫습니다.
recv error대기 중이던 워커가 더 이상 작업이 없음을 감지합니다.
break loop워커는 작업 루프를 종료합니다.
join메인 스레드는 각 워커 스레드가 끝나길 기다립니다.
clean shutdown남은 스레드 없이 종료가 완료됩니다.
Drop채널 닫기recv 실패루프 종료join

주의점

safe
sender 먼저join 전에 채널을 닫아야 워커가 계속 기다리지 않습니다.
Option 사용Drop에서 소유권을 꺼내기 위해 sender를 Option으로 감쌉니다.
작업 완료이미 받은 작업은 처리하고 다음 recv에서 종료를 알 수 있습니다.
데드락 방지종료 신호 없이 join하면 워커가 영원히 대기할 수 있습니다.