[Rust] 채널을 통한 데이터 전달과 동기화

러스트에서도 Golang과 유사한 채널을 표준 라이브러리로 제공한다.

채널은 스레드 간에 데이터를 편리하게 주고받을 수 있게해주며, 더불어 충돌이 발생하지 않도록 동기화도 알아서 해주는 똑똑한 놈이다.

채널 함수인 channel은 std::sync::mpsc 모듈에 존재한다.
이름이 좀 기괴한데, Multi-producer, single-consumer의 축약이라고 한다.

여튼 채널함수는 channel::<채널타입>()와 같이 호출하면 해당 타입의 전송자와 수신자를 튜플로 반환한다.

그리고 수신자는 전송이 올때까지 자동으로 대기를 탄다.

아래는 정수 하나를 주고받기만 하는 간단한 코드다. image

image

아래 코드는 메인스레드는 놀고, 추가 스레드끼리 1부터 4까지의 값을 순서대로 주고받는다. image

image



참조
https://doc.rust-lang.org/std/sync/mpsc/
https://rinthel.github.io/rust-lang-book-ko/ch16-02-message-passing.html