Drop 시작
스레드 풀이 스코프를 벗어나며 정리 코드가 실행된다.
join 전에 채널을 닫아야 워커가 루프를 빠져나온다
sender를 먼저 버리면 recv가 에러를 반환하고,
워커는 그 신호를 보고 종료 경로로 들어간다.
Drop 시작
스레드 풀이 스코프를 벗어나며 정리 코드가 실행된다.
채널이 닫히면 기다리던 recv 호출이 Err를
돌려준다.
워커가 break한 뒤 join 대상 스레드가 끝난
상태가 된다.
sender와 thread를 Option으로
감싸 두면 Drop 안에서 값을 이동시키고 빈 자리에는
None을 남길 수 있다.
join은 기다림에 갇힌다
워커가 계속 작업을 기다리면 메인 스레드도 join에서
기다리므로, 먼저 기다림을 깨우는 신호가 필요하다.