美文网首页RUST编程
Rust 编程视频教程(进阶)——017_1 消息传递 1

Rust 编程视频教程(进阶)——017_1 消息传递 1

作者: 令狐壹冲 | 来源:发表于2020-02-14 09:35 被阅读0次

    视频地址

    头条地址:https://www.ixigua.com/i6775861706447913485
    B站地址:https://www.bilibili.com/video/av81202308/

    源码地址

    github地址:https://github.com/anonymousGiga/learn_rust

    讲解内容

    1、Rust中一个实现消息传递并发的主要工具是通道。通道由两部分组成,一个是发送端,一个是接收端,发送端用来发送消息,接收端用来接收消息。发送者或者接收者任一被丢弃时就可以认为通道被关闭了。

    2、通道介绍
    (1)通过mpsc::channel,创建通道,mpsc是多个生产者,单个消费者;
    (2)通过spmc::channel,创建通道,spmc是一个生产者,多个消费者;
    (3)创建通道后返回的是发送者和消费者,示例:

    let (tx, rx) = mpsc::channel();
    let (tx, rx) = spmc::channel();
    

    3、示例

    use std::thread; 
    use std::sync::mpsc; 
    fn main() { 
        let (tx, rx) = mpsc::channel();//返回发送者、接收者
        thread::spawn(move || { 
            let val = String::from("hi");
            tx.send(val).unwrap(); //使用发送者通过channel发送
        }); 
        let received = rx.recv().unwrap();//使用接收者通过channel接收 
        println!("Got: {}", received); 
    }
    

    知识点:
    (1)发送者的send方法返回一个Result<T, E>类型,如果接收端已经被丢弃了,将没有发送值的目标,所以发送操作将返回错误;
    (2)接收者的recv方法也返回Result<T, E>类型,当通道发送端关闭时,将返回一个错误值表明不会再由新的值到来了;
    (3)接收还可以使用try_recv方法,recv方法会阻塞到一直等待到消息到来,而try_recv不会阻塞,它会立即返回,Ok值标识包含可用信息,而Err则代表此时没有任何信息。

    相关文章

      网友评论

        本文标题:Rust 编程视频教程(进阶)——017_1 消息传递 1

        本文链接:https://www.haomeiwen.com/subject/lmfdfhtx.html