typestar

Concurrencia y async

15 pasos en 5 series de Rust.

La promesa de Rust sobre concurrencia es más fuerte que su promesa sobre memoria: las carreras de datos son un error de compilación, no una sesión de depuración. Primero hilos, luego estado compartido con Arc y Mutex, después canales.

La última serie es async con tokio, que es otro modelo distinto y conviene mantenerlo separado en tu cabeza. Quince pasos, y aquí el compilador hace más por ti que en ninguna otra parte del lenguaje.

Empieza este tour

Hilos

  • Crear hilosspawn arranca un hilo y devuelve un handle; join espera y recoge su valor.
  • Closures moveUn hilo sobrevive al marco de pila de quien llama; debe ser dueño de lo que captura.
  • Hilos con scopethread::scope deja que los hilos presten datos locales: no pueden sobrevivir al scope.

Estado compartido

  • Arc y MutexArc comparte la propiedad entre hilos; Mutex vuelve segura la mutación.
  • RwLockMuchos lectores o un escritor: el lock indicado cuando dominan las lecturas.
  • AtómicosPara un contador o una bandera, un atómico sale más barato que un mutex.

Canales

  • Canalesmpsc mueve valores entre hilos: muchos emisores, un receptor.
  • Un pool de workersTrabajos por un canal, resultados de vuelta por otro — un pool en veinte líneas.

Async con tokio

Bis

  • parallel_sum.rsRepartir una suma grande entre hilos y comparar contra la respuesta en serie.

Los otros tours de Rust