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