diff --git a/diagrams/07-tokio.mmd b/diagrams/07-tokio.mmd new file mode 100644 index 0000000..7893c6b --- /dev/null +++ b/diagrams/07-tokio.mmd @@ -0,0 +1,4 @@ +flowchart LR + F[Future] --> E[Executor educativo] + F --> T[Tokio runtime] + T --> I[Timers, tasks y sincronización] diff --git a/docs/07-tokio-y-runtime-de-produccion.md b/docs/07-tokio-y-runtime-de-produccion.md new file mode 100644 index 0000000..54e99cb --- /dev/null +++ b/docs/07-tokio-y-runtime-de-produccion.md @@ -0,0 +1,42 @@ +# Tokio y Runtime de Producción + +> **Curso:** Rust Async · **Capítulo:** 07 · **Prerequisitos:** capítulos 01–06 · **Estado:** draft + +## Introducción + +Tokio es un runtime de producción para ejecutar muchas operaciones asíncronas. +Aquí se usa después del executor educativo para conectar contratos aprendidos +con herramientas reales, no para ocultarlos. + +## Comparación + +El runtime educativo muestra una cola y pasos explícitos; Tokio aporta +scheduling, wakeups, temporizadores y primitivas de coordinación. Ninguno hace +que una tarea CPU-bound que no cede sea cooperativa por sí solo. + +```mermaid +flowchart LR + F[Future] --> E[Executor educativo] + F --> T[Tokio runtime] + T --> I[Timers, tasks y sincronización] +``` + +## Ejemplos + +`tokio::spawn` ejecuta una task y devuelve un `JoinHandle`; `timeout` limita el +tiempo de espera de una operación. Ambos ejemplos usan únicamente las features +explícitas del crate: runtime multihilo, macros, tiempo y sincronización. + +```rust +let handle = tokio::spawn(async { 7_u8 }); +assert_eq!(handle.await.expect("task should finish"), 7); +``` + +## Límites y Ejercicios + +No se habilita `full`, no se usa `unsafe` y no se reimplementa Tokio. Ejercicios: +comparar el executor propio con `spawn`, añadir un timeout y explicar qué ocurre +cuando una task realiza CPU intensiva sin ceder. + +Referencias: [Tokio](https://tokio.rs/) y +[documentación de tokio](https://docs.rs/tokio/). diff --git a/docs/superpowers/plans/2026-07-28-rust-async-course.md b/docs/superpowers/plans/2026-07-28-rust-async-course.md index 22e5177..ab2cbb7 100644 --- a/docs/superpowers/plans/2026-07-28-rust-async-course.md +++ b/docs/superpowers/plans/2026-07-28-rust-async-course.md @@ -69,8 +69,8 @@ Para cada capítulo, antes de pasar al siguiente: - [ ] Capítulo 07: Tokio y un runtime de producción. - [x] #23 Documentar criterio de integración y autorización de dependencia. - - [ ] #24 Implementar ejemplos de runtime de producción. - - [ ] #25 Escribir capítulo, comparativas, ejemplos y ejercicios. + - [x] #24 Implementar ejemplos de runtime de producción. + - [x] #25 Escribir capítulo, comparativas, ejemplos y ejercicios. - [ ] Capítulo 08: `select!`, cancelación y timeouts. - [ ] Capítulo 09: canales y sincronización asíncrona.