Temas importantes de Rust

Rust Threads: spawn and join

Run code in parallel with thread::spawn and collect each result with join.

  • Avanzado
  • 2 min de lectura
  • 1 ejemplo ejecutable
Lo que aprenderás
  • thread::spawn
  • move closures
  • join and return values
Three workers
  1. 1spawn x3threads start
  2. 2sumeach works alone
  3. 3join()wait for each
  4. 4resultsprinted in order

Work that runs at the same time

A thread runs a piece of code at the same time as the rest of the program. thread::spawn starts one and returns a handle that you can use to wait for it.

move gives each thread its own copy of id. The threads may finish in any order, but join waits for each handle in the order they were created, so the output is always the same. join returns the value the closure produced.

Puntos clave

  1. spawn starts a thread and returns a handle.
  2. move gives the thread its own data.
  3. join waits and returns the thread's value.

Ejemplo ejecutable de Rust

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

fn main() {
    let mut handles = Vec::new();

    for id in 1..=3u64 {
        let handle = thread::spawn(move || {
            let total: u64 = (1..=id * 1000).sum();
            (id, total)
        });
        handles.push(handle);
    }

    for handle in handles {
        let (id, total) = handle.join().unwrap();
        println!("worker {id} summed to {total}");
    }
}
Obtén un botón Run para este ejemplo Resultado de ejecutar el código
worker 1 summed to 500500
worker 2 summed to 2001000
worker 3 summed to 4501500

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.

Siguiente: Channels →

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