Message Passing

채널 메시지 설계 흐름

채널은 데이터 소유권을 보내는 쪽에서 받는 쪽으로 이동시켜 공유 메모리 없이 스레드 간 협력을 구성합니다.

clone은 송신 핸들, move는 메시지 값 모든 Sender가 drop되면 Receiver 반복이 자연스럽게 끝납니다.
main
channel() tx / rx 한 쌍 생성
tx.clone() 생산자 핸들만 복제
drop(tx) 마지막 Sender까지 정리
sender A
owns tx 스레드로 핸들 이동
send(v) v 소유권이 채널로 이동
sender end 핸들 drop
sender B
owns tx2 clone된 Sender
send(w) w 소유권도 채널로 이동
sender end 핸들 drop
receiver
owns rx 소비자 쪽 핸들
recv v, w 받은 값의 소유권 확보
for msg in rx 메시지가 올 때마다 반복
loop ends 모든 Sender drop 감지
ownership move

send 이후 원본은 사용하지 않음

값은 송신 스레드에서 수신 스레드로 이동하므로 공유 잠금 없이 안전합니다.

termination
1 필요한 생산자 수만큼 Sender를 clone합니다.
2 Receiver는 recv 또는 반복자로 메시지를 처리합니다.
3 마지막 Sender가 drop되면 수신 반복이 종료됩니다.