O que é Tokio e para que serve?
\n\nTokio é um runtime assíncrono para a linguagem de programação Rust. Ele fornece infraestrutura para escrever aplicações de rede rápidas, confiáveis e escaláveis. Se você está escrevendo em Rust algo que trabalha com rede, arquivos ou requer processamento paralelo de requisições sem bloqueio de threads — você precisa do Tokio.
\n\nDiferente da abordagem tradicional multithread, onde cada requisição é processada em uma thread separada do SO (o que é caro e limitado), o Tokio utiliza um modelo de entrada/saída assíncrona baseado em eventos. Uma única thread pode processar milhares de conexões simultâneas abertas, alternando entre tarefas apenas quando a tarefa atual está esperando (por exemplo, leitura de um socket).
\n\nTokio não é apenas uma biblioteca, é um ecossistema. Ele inclui:
\n- \n
- Runtime — escalonador de tarefas e drivers de eventos (epoll/kqueue/IOCP) \n
- Protocolos de rede padrão — TCP, UDP, Unix sockets \n
- Temporizadores — sleep, interval, deadline \n
- Sincronização — mutexes, semáforos, barreiras para código assíncrono \n
- Entrada/Saída de arquivos — leitura/escrita assíncrona de arquivos \n
- Utilitários — canais (mpsc, oneshot, broadcast), buffers, codec \n
Tokio está na base de projetos conhecidos como o framework web Axum, o cliente HTTP Reqwest, websockets Tungstenite, banco de dados SQLx e muitos outros.
\n\nInstalação
\n\nDiferente do Python (pip) ou Node.js (npm), o Rust utiliza o sistema de pacotes Cargo. Para instalar o Tokio, adicione a dependência no arquivo Cargo.toml:
[dependencies]\ntokio = { version = "1", features = ["full"] }\n\nA flag features = ["full"] ativa todas as funcionalidades do Tokio. Para projetos em produção, recomenda-se selecionar apenas os recursos necessários para reduzir o tempo de compilação e o tamanho do binário:
[dependencies]\ntokio = { version = "1", features = ["rt", "macros", "net", "io-util", "time", "sync"] }\n\nPrincipais recursos:
\n- \n
rt— runtime multithread \n macros— macros#[tokio::main]etokio::select!\n net— TCP, UDP, Unix sockets \n io-util— Reader/Writer assíncronos \n time— temporizadores e sleep \n sync— primitivas de sincronização \n fs— trabalho assíncrono com sistema de arquivos \n process— execução assíncrona de comandos \n signal— tratamento de sinais do SO \n
Início rápido
\n\nVamos criar um servidor HTTP simples que responde "Hello, World!" a qualquer requisição. Para isso, precisaremos também do crate hyper (biblioteca HTTP sobre Tokio):
// Cargo.toml\n// [dependencies]\n// tokio = { version = "1", features = ["full"] }\n// hyper = { version = "1", features = ["server", "http1"] }\n\nuse hyper::service::service_fn;\nuse hyper::{Request, Response, Server};\nuse hyper::body::Incoming;\nuse std::convert::Infallible;\n\nasync fn handle_request(_req: Request<Incoming>) -> Result<Response<String>, Infallible> {\n Ok(Response::new("Hello, World!".to_string()))\n}\n\n#[tokio::main]\nasync fn main() {\n let addr = ([127, 0, 0, 1], 3000).into();\n let server = Server::bind(&addr).serve(service_fn(handle_request));\n println!("Server running on http://{}", addr);\n if let Err(e) = server.await {\n eprintln!("Server error: {}", e);\n }\n}\n\nExecute cargo run e abra http://127.0.0.1:3000 no navegador. Você verá "Hello, World!".
Métodos e funções principais
\n\n1. tokio::spawn
Também na biblioteca
RxSwift para Swift: guia completo com exemplos
Knex.js para JavaScript (Node.js): guia completo com exemplos práticos
Bibliotecas WebSocket Swift: Starscream e URLSessionWebSocketTask
Envio de email em Kotlin: bibliotecas e exemplos de código
Gradle Kotlin DSL para Kotlin: guia completo com exemplos
Recommendations
Também na biblioteca
RxSwift para Swift: guia completo com exemplos
Knex.js para JavaScript (Node.js): guia completo com exemplos práticos
Bibliotecas WebSocket Swift: Starscream e URLSessionWebSocketTask
Envio de email em Kotlin: bibliotecas e exemplos de código
Gradle Kotlin DSL para Kotlin: guia completo com exemplos