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 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