📊 Capítulo 18: Async Rust com Tokio
Especialização em Sistemas com Rust
🗺️ O Runtime Assíncrono Multi-Thread do Tokio
flowchart TD
MAIN["#[tokio::main]"]
--> RUNTIME["Tokio Multi-Thread Runtime (Work-Stealing Scheduler)"]
RUNTIME --> TASK1["tokio::spawn(async task 1)"]
RUNTIME --> TASK2["tokio::spawn(async task 2)"]
RUNTIME --> TASK3["tokio::spawn(async task 3)"]
TASK1 -.-> |"I/O Bloqueante (epoll/kqueue/IOCP)"| DRIVER["Tokio I/O & Timer Driver"]
style MAIN fill:#ede7f6,stroke:#512da8,stroke-width:2px
style RUNTIME fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style TASK1 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style TASK2 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style TASK3 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style DRIVER fill:#fff3e0,stroke:#ff9800,stroke-width:2px
🎯 Slide 1: Futures em Rust São Preguiçosas (Pull-Based)
- No Rust, uma função
async fnNÃO executa nada ao ser chamada! Ela simplesmente retorna umaFutureque só avança quando explicitamente chamada com.awaitou agendada no runtime Tokio.
🎯 Slide 2: Concorrência Massiva com tokio::spawn
use tokio::net::TcpListener;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
loop {
let (socket, _) = listener.accept().await?;
tokio::spawn(async move {
processar_conexao(socket).await; // Milhões de tasks concorrentes leves!
});
}
}
🎯 Slide 3: O Macro tokio::select!
- Permite aguardar múltiplos eventos assíncronos simultaneamente e agir no primeiro que completar, cancelando ou pausando os demais (útil para timeouts e cancelamento gracioso).
🔗 Navegação do Capítulo 18
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim