Rust 程式設計視訊教程(進階)——017_1 訊息傳遞 1

linghuyichong發表於2020-02-08

頭條地址:https://www.ixigua.com/i677586170644791348...
B站地址:https://www.bilibili.com/video/av81202308/

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

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則代表此時沒有任何資訊。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

令狐一衝

相關文章