채널

러스트의 채널은 Sender<T>Receiver<T> 두 부분으로 구성됩니다. 이 둘은 채널을 통해 서로 연결되어 있지만, 우리는 채널을 볼 수는 없고 이 양 끝단만을 사용하게 됩니다.

use std::sync::mpsc;

fn main() {
    let (tx, rx) = mpsc::channel();

    tx.send(10).unwrap();
    tx.send(20).unwrap();

    println!("수신됨: {:?}", rx.recv());
    println!("수신됨: {:?}", rx.recv());

    let tx2 = tx.clone();
    tx2.send(30).unwrap();
    println!("수신됨: {:?}", rx.recv());
}
  • mpsc는 “Multi-Produce, Single-Consumer”를 의미합니다. SenderSyncSenderClone을 구현하지만 (즉, 여러개의 producer를 만들수 있습니다) ReceiverClone을 구현하지 않습니다.
  • send()recv()Result를 반환합니다. 만일 Err가 반환된다면, 상대방의 Sender또는 Receiver가 삭제되었고 채널이 닫혔다는 뜻입니다.