使用 Rust MPSC
Rust 有许多特性,使其成为程序员的一个有吸引力的选择。一是能够通过同一通道发送不同类型的消息。
此功能允许 Rust 程序员避免数据竞争并更多地控制程序的内存使用。本 Rust 通道教程将重点介绍使用同一通道发送不同类型的内容。
MPSC(多个生产者,单个消费者)是在 Rust 程序中发送消息的绝佳方式。MPSC 是一个可用于发送和接收消息的队列。
在 Rust 中发送消息可以通过 std::sync 模块
中可用的通道来完成。通道提供了一个接口,用于在线程或进程之间发送和接收数据,而无需锁定或显式同步。
通道的类型
有两种类型的频道可用:
无限缓冲的异步通道
所有发送都是异步的;因此,通道函数将返回一个 (Sender, Receiver)
元组(它们从不阻塞)。通道理论上有无限的缓冲。
有界的同步通道
同步通道方法返回一个 (SyncSender, Receiver)
元组,其中包含为等待消息预先分配的缓冲区大小。在有足够的缓冲区空间之前,所有传输都将是同步和阻塞的。
值得注意的是,0 的界限允许通道成为一个集合通道,其中每个发送者原子地向接收者发送消息。
使用 Rust MPSC 的步骤
要在 Rust 中使用通道,你必须导入 MPSC crate。步骤如下:
-
通过在文件顶部添加以下行来导入 crate:
usempsc::{Sender,Receiver};
-
通过在导入后添加此行来创建新的发送者和接收者:
let(tx,rx)=mpsc::channel();
-
最后,在
tx
上发送消息。
让我们讨论一个例子。
usestd::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_in0..2{matchrx.recv().unwrap(){Furniture::Bed(a)=>println!("Got {} Beds",a),Furniture::Table(b)=>println!("Got {} Tables",b),}}}
输出:
Got 2 Tables
Got 4 Beds
点击这里查看上述代码的演示。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。