使用 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
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
发布时间:2024/02/05 浏览次数:134 分类:编程语言
-
本教程是关于 rust 中 rc::clone(&rc) 和 rc.clone() 之间的区别。
发布时间:2024/02/05 浏览次数:107 分类:编程语言
-
rust 有一个 & 符号特性,可用于在代码中的任何位置使任何变量可变或不可变。
发布时间:2023/03/21 浏览次数:269 分类:编程语言
-
这个简短的教程演示了如何使用 rust 中的 abs() 函数获取绝对值。
发布时间:2023/03/21 浏览次数:205 分类:编程语言
-
本教程演示了在 rust 结构中初始化变量的简短方法。
发布时间:2023/03/21 浏览次数:148 分类:编程语言
-
本教程演示了在 rust 中克隆 arc 时会发生什么。
发布时间:2023/03/21 浏览次数:223 分类:编程语言
-
本教程演示了在不同版本的 rust 中读取和写入文件的方式。
发布时间:2023/03/21 浏览次数:140 分类:编程语言
-
本教程是关于 rust 中 rc::clone(&rc) 和 rc.clone() 之间的区别。
发布时间:2023/03/21 浏览次数:242 分类:编程语言
-
本教程演示了 rust 的逐步交互式调试器。
发布时间:2023/03/21 浏览次数:374 分类:编程语言
-
本教程是关于使用 rust-image 以程序方式生成图像的。