1、Rust中一个实现消息传递并发的主要工具是通道。通道由两部分组成,一个是发送端,一个是接收端,发送端用来发送消息,接收端用来接收消息。发送者或者接收者任一被丢弃时就可以认为通道被关闭了。
2、通道介绍
(1)通过mpsc::channel,创建通道,mpsc是多个生产者,单个消费者;
(2)通过spmc::channel,创建通道,spmc是一个生产者,多个消费者;
(3)创建通道后返回的是发送者和消费者,示例:
let (tx, rx) = mpsc::channel();
let (tx, rx) = spmc::channel();
例子:
use std::sync::mpsc;
use std::thread;
fn main() {
let (tx, rx) = mpsc::channel(); // 创建通道
thread::spawn(move || { // 创建线程
let val = String::from("hi");
tx.send(val).unwrap(); // 发送val
});
let received = rx.recv().unwrap(); // 接收val
println!("Got: {}", received);
}
知识点:
1、发送者的send方法返回的是一个Result<T, E>,如果接收端已经被丢弃了,将没有发送值的目标,此时发送会返回错误。
2、接受者的recv返回值也是一个Result类型,当通道发送端关闭时,返回一个错误值。
3、接收端这里使用的recv方法,会阻塞到有一个消息到来。我们也可以使用try_recv(),不会阻塞,会立即返回。
本节全部源代码:
https://github.com/anonymousGiga/learn_rust/blob/master/learn_channel/src/main.rs
来源:oschina
链接:https://my.oschina.net/u/943779/blog/4938634