Verwenden Sie das Rust-MPSC

Muhammad Adil 30 Januar 2023
  1. Arten von Kanälen
  2. Schritte zur Verwendung des Rust-MPSC
Verwenden Sie das Rust-MPSC

Rust hat viele Funktionen, die es zu einer attraktiven Wahl für Programmierer machen. Eine davon ist die Möglichkeit, Nachrichten unterschiedlicher Art über denselben Kanal zu senden.

Diese Funktion ermöglicht es Rust-Programmierern, Datenrennen zu vermeiden und die Speichernutzung ihres Programms besser zu kontrollieren. Dieses Rust-Kanal-Tutorial konzentriert sich auf das Senden verschiedener Typen über denselben Kanal.

Der MPSC (Multiple Producer, Single Consumer) ist eine hervorragende Möglichkeit, Nachrichten in einem Rust-Programm zu senden. Das MPSC ist eine Warteschlange, die sowohl zum Senden als auch zum Empfangen von Nachrichten verwendet werden kann.

Das Senden von Nachrichten in Rust kann über Kanäle erfolgen, die im Modul std::sync verfügbar sind. Kanäle bieten eine Schnittstelle zum Senden und Empfangen von Daten zwischen Threads oder Prozessen ohne Sperren oder explizite Synchronisierung.

Arten von Kanälen

Es stehen zwei Arten von Kanälen zur Verfügung:

Ein unbegrenzt gepufferter, asynchroner Kanal

Alle Sendevorgänge erfolgen asynchron; Daher gibt die Kanalfunktion ein (Sender, Receiver)-Tupel zurück (sie blockieren nie). Theoretisch hat der Kanal einen endlosen Puffer.

Ein begrenzter, synchroner Kanal

Die Sync-Channel-Methode gibt ein (SyncSender, Receiver)-Tupel mit einer vorab zugewiesenen Puffergröße für wartende Nachrichten zurück. Alle Übertragungen werden synchron und blockiert, bis genügend Pufferspeicher vorhanden ist.

Es ist erwähnenswert, dass eine Grenze von 0 es dem Kanal ermöglicht, ein Rendezvous-Kanal zu werden, in dem jeder Sender atomar eine Nachricht an einen Empfänger sendet.

Schritte zur Verwendung des Rust-MPSC

Um Kanäle in Rust zu verwenden, müssen Sie die MPSC-Crate importieren. Die Schritte sind wie folgt:

  • Importieren Sie die Kiste, indem Sie diese Zeile oben in Ihre Datei einfügen:
    use mpsc::{Sender, Receiver};
    
  • Erstellen Sie einen neuen Sender und Empfänger, indem Sie nach dem Importieren diese Zeile hinzufügen:
    let (tx, rx) = mpsc::channel();
    
  • Zuletzt senden Sie Nachrichten auf tx.

Lassen Sie uns ein Beispiel diskutieren.

use std::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 _ in 0..2 {
        match rx.recv().unwrap() {
            Furniture::Bed(a) => println!("Got {} Beds", a),
            Furniture::Table(b) => println!("Got {} Tables", b),
        }
    }
}

Ausgabe:

Got 2 Tables
Got 4 Beds

Klicken Sie hier, um die Demonstration des oben erwähnten Codes zu überprüfen.

Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook