使用 Rust MPSC
Rust 有許多特性,使其成為程式設計師的一個有吸引力的選擇。一是能夠通過同一通道傳送不同型別的訊息。
此功能允許 Rust 程式設計師避免資料競爭並更多地控制程式的記憶體使用。本 Rust 通道教程將重點介紹使用同一通道傳送不同型別的內容。
MPSC(多個生產者,單個消費者)是在 Rust 程式中傳送訊息的絕佳方式。MPSC 是一個可用於傳送和接收訊息的佇列。
在 Rust 中傳送訊息可以通過 std::sync 模組
中可用的通道來完成。通道提供了一個介面,用於線上程或程序之間傳送和接收資料,而無需鎖定或顯式同步。
通道的型別
有兩種型別的頻道可用:
無限緩衝的非同步通道
所有傳送都是非同步的;因此,通道函式將返回一個 (Sender, Receiver)
元組(它們從不阻塞)。通道理論上有無限的緩衝。
有界的同步通道
同步通道方法返回一個 (SyncSender, Receiver)
元組,其中包含為等待訊息預先分配的緩衝區大小。在有足夠的緩衝區空間之前,所有傳輸都將是同步和阻塞的。
值得注意的是,0 的界限允許通道成為一個集合通道,其中每個傳送者原子地向接收者傳送訊息。
使用 Rust MPSC 的步驟
要在 Rust 中使用通道,你必須匯入 MPSC crate。步驟如下:
-
通過在檔案頂部新增以下行來匯入 crate:
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