Rust MPSC 사용
Rust는 프로그래머에게 매력적인 선택이 되는 많은 기능을 가지고 있습니다. 하나는 동일한 채널을 통해 다른 유형의 메시지를 보내는 기능입니다.
이 기능을 통해 Rust 프로그래머는 데이터 경쟁을 피하고 프로그램의 메모리 사용량을 더 많이 제어할 수 있습니다. 이 Rust 채널 튜토리얼은 동일한 채널을 사용하여 다른 유형을 보내는 데 중점을 둘 것입니다.
MPSC(다중 생산자, 단일 소비자)는 Rust 프로그램에서 메시지를 보내는 훌륭한 방법입니다. MPSC는 메시지를 보내고 받는 데 모두 사용할 수 있는 대기열입니다.
Rust에서 메시지를 보내는 것은 std::sync 모듈
에서 사용 가능한 채널을 통해 수행할 수 있습니다. 채널은 잠금 또는 명시적 동기화 없이 스레드 또는 프로세스 간에 데이터를 보내고 받기 위한 인터페이스를 제공합니다.
채널 유형
두 가지 유형의 채널을 사용할 수 있습니다.
무기한 버퍼링된 비동기 채널
모든 전송은 비동기식입니다. 따라서 채널 함수는 (Sender, Receiver)
튜플을 반환합니다(차단하지 않음). 채널에는 이론상 무한 버퍼가 있습니다.
제한된 동기 채널
동기화 채널 메서드는 대기 메시지에 대해 미리 할당된 버퍼 크기와 함께 (SyncSender, Receiver)
튜플을 반환합니다. 모든 전송은 동기식이며 버퍼 공간이 충분할 때까지 차단됩니다.
경계가 0이면 채널이 랑데뷰 채널이 되며, 여기서 각 발신자는 원자적으로 수신자에게 메시지를 보냅니다.
Rust MPSC를 사용하는 단계
Rust에서 채널을 사용하려면 MPSC 크레이트를 가져와야 합니다. 단계는 다음과 같습니다.
-
파일 맨 위에 다음 줄을 추가하여 크레이트를 가져옵니다.
use mpsc::{Sender, Receiver};
-
가져온 후 다음 행을 추가하여 새 발신자와 수신자를 만듭니다.
let (tx, rx) = mpsc::channel();
-
마지막으로
tx
로 메시지를 보냅니다.
예를 들어 보겠습니다.
use std::sync::mpsc::{self, Receiver, Sender};
enum Furniture {
Bed(i32),
Table(i32)
}
fn main() {
let (tx, rx): (Sender<Furniture>, Receiver<Furniture>) = mpsc::channel();
tx.send(Furniture::Table(2)).unwrap();
tx.send(Furniture::Bed(4)).unwrap();
for _ in 0..2 {
match rx.recv().unwrap() {
Furniture::Bed(a) => println!("Got {} Beds", a),
Furniture::Table(b) => println!("Got {} Tables", b),
}
}
}
출력:
Got 2 Tables
Got 4 Beds
여기를 클릭 위에서 언급한 코드의 데모를 확인하십시오.
Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.
Facebook