Utilizar el MPSC de Rust

Muhammad Adil 21 junio 2022
  1. Tipos de canales
  2. Pasos para usar Rust MPSC
Utilizar el MPSC de Rust

Rust tiene muchas características que lo convierten en una opción atractiva para los programadores. Una es la capacidad de enviar mensajes de diferentes tipos por el mismo canal.

Esta característica permite a los programadores de Rust evitar carreras de datos y controlar más el uso de memoria de su programa. Este tutorial del canal Rust se centrará en enviar diferentes tipos usando el mismo canal.

El MPSC (multiple producers, single consumers) es una excelente manera de enviar mensajes en un programa Rust. El MPSC es una cola que se puede utilizar tanto para enviar como para recibir mensajes.

El envío de mensajes en Rust se puede hacer a través de los canales disponibles en el módulo std::sync. Los canales proporcionan una interfaz para enviar y recibir datos entre subprocesos o procesos sin bloqueo ni sincronización explícita.

Tipos de canales

Hay dos tipos de canales disponibles:

Un canal asíncrono con búfer indefinido

Todos los envíos serán asíncronos; por lo tanto, la función de canal devolverá una tupla (Sender, Receiver) (nunca se bloquean). El canal tiene un búfer infinito en teoría.

Un canal acotado y síncrono

El método del canal de sincronización devuelve una tupla (SyncSender, Receiver) con un tamaño de búfer preasignado para los mensajes en espera. Todas las transmisiones serán sincrónicas y bloqueadas hasta que haya suficiente espacio en el búfer.

Vale la pena señalar que un límite de 0 permite que el canal se convierta en un canal de encuentro, en el que cada remitente envía atómicamente un mensaje a un receptor.

Pasos para usar Rust MPSC

Para usar canales en Rust, debe importar la caja MPSC. Los pasos son los siguientes:

  • Importe la caja agregando esta línea en la parte superior de su archivo:
    use mpsc::{Sender, Receiver};
    
  • Cree un nuevo Remitente y Receptor agregando esta línea después de importar:
    let (tx, rx) = mpsc::channel();
    
  • Por último, envíe mensajes en tx.

Analicemos un ejemplo.

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),
        }
    }
}

Producción :

Got 2 Tables
Got 4 Beds

Haga clic aquí para ver la demostración del código mencionado anteriormente.

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