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하면 워커가 영원히 대기할 수 있습니다.