Temas importantes de Rust

Rust Channels: mpsc

Send messages from one thread to another instead of sharing memory.

  • Avanzado
  • 2 min de lectura
  • 1 ejemplo ejecutable
Lo que aprenderás
  • mpsc::channel
  • send and receive
  • How a channel closes
Producer to main
  1. 1sender.sendproducer thread
  2. 2channelstep 1, step 2, step 3
  3. 3for message in receivermain thread

A one-way pipe between threads

A channel is a one-way pipe between threads. One side sends values and the other receives them, so threads can work together without sharing memory.

channel returns a sender and a receiver. The producer thread owns the sender and sends three messages. When the thread ends, the sender is dropped and the channel closes, which ends the for loop over the receiver.

Puntos clave

  1. channel() returns a sender and a receiver.
  2. The receiver can be used in a for loop.
  3. Dropping the sender closes the channel.

Ejemplo ejecutable de Rust

Rust
Ejecutar código →
main.rs
use std::sync::mpsc;
use std::thread;

fn main() {
    let (sender, receiver) = mpsc::channel();

    let producer = thread::spawn(move || {
        for step in 1..=3 {
            sender.send(format!("step {step} done")).unwrap();
        }
    }); // sender is dropped here, which closes the channel

    for message in receiver {
        println!("received: {message}");
    }
    producer.join().unwrap();
    println!("all messages received");
}
Obtén un botón Run para este ejemplo Resultado de ejecutar el código
received: step 1 done
received: step 2 done
received: step 3 done
all messages received

Practica

Abre el ejemplo en el compilador online, cambia un valor o añade una línea y predice la salida antes de ejecutarlo. Después rompe el código a propósito y lee el mensaje del compilador.

¿Terminaste esta lección?

Márcala como aprendida para seguir tu progreso.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos