tokio-rs/tokio

GitHub: tokio-rs/tokio

Tokio 是 Rust 语言的主流异步运行时,为构建高性能、可靠的异步应用程序提供事件驱动、非阻塞 I/O 和多线程任务调度能力。

Stars: 31346 | Forks: 2955

# Tokio 一个用于使用 Rust 编程语言编写可靠、异步且轻量级应用程序的运行时。它具有以下特点: * **快速**:Tokio 的零成本抽象为您带来裸机般的性能。 * **可靠**:Tokio 利用 Rust 的所有权、类型系统和并发模型来减少错误并确保线程安全。 * **可扩展**:Tokio 占用空间极小,并能自然地处理反向压力和取消操作。 [![Crates.io](https://img.shields.io/crates/v/tokio.svg)][crates-url] [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)][mit-url] [![Build Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cb99a0cf69004803.svg)][actions-url] [![Discord chat](https://img.shields.io/discord/500028886025895936.svg?logo=discord&style=flat-square)][discord-url] [网站](https://tokio.rs) | [指南](https://tokio.rs/tokio/tutorial) | [API 文档](https://docs.rs/tokio/latest/tokio) | [聊天](https://discord.gg/tokio) ## 概述 Tokio 是一个事件驱动的非阻塞 I/O 平台,用于使用 Rust 编程语言编写异步应用程序。从宏观角度来看,它提供了几个主要组件: * 一个基于工作窃取的多线程任务 [scheduler]。 * 一个由操作系统事件队列(epoll, kqueue, IOCP 等)支持的 reactor。 * 异步 [TCP 和 UDP][net] 套接字。 这些组件提供了构建异步应用程序所需的运行时组件。 ## 示例 一个使用 Tokio 的基本 TCP echo 服务器。 请确保在 Cargo.toml 中启用 tokio crate 的完整功能: ``` [dependencies] tokio = { version = "1.50.0", features = ["full"] } ``` 然后,在你的 main.rs 中: ``` use tokio::net::TcpListener; use tokio::io::{AsyncReadExt, AsyncWriteExt}; #[tokio::main] async fn main() -> Result<(), Box> { let listener = TcpListener::bind("127.0.0.1:8080").await?; loop { let (mut socket, _) = listener.accept().await?; tokio::spawn(async move { let mut buf = [0; 1024]; // In a loop, read data from the socket and write the data back. loop { let n = match socket.read(&mut buf).await { // socket closed Ok(0) => return, Ok(n) => n, Err(e) => { eprintln!("failed to read from socket; err = {:?}", e); return; } }; // Write the data back if let Err(e) = socket.write_all(&buf[0..n]).await { eprintln!("failed to write to socket; err = {:?}", e); return; } } }); } } ``` 更多示例可以在 [这里][examples] 找到。对于一个更大的“真实世界”示例,请参阅 [mini-redis] 仓库。 要查看可以启用的可用功能标志列表,请查看我们的 [文档][feature-flag-docs]。 ## 获取帮助 首先,看看能否在 [指南][Guides] 或 [API 文档][API documentation] 中找到你问题的答案。如果答案不在那里,[Tokio Discord 服务器][chat] 中有一个活跃的社区。我们很乐意尝试回答你的问题。你也可以在 [讨论页面][discussions] 上提问。 ## 相关项目 除了这个仓库中的 crates 外,Tokio 项目还维护着几个其他库,包括: * [`axum`]:一个专注于人体工程学和模块化的 Web 应用程序框架。 * [`hyper`]:一个快速且正确的 Rust HTTP/1.1 和 HTTP/2 实现。 * [`tonic`]:一个专注于高性能、互操作性和灵活性的基于 HTTP/2 的 gRPC 实现。 * [`warp`]:一个超级简单、可组合的 Web 服务器框架,旨在提供极快的速度。 * [`tower`]:一个用于构建健壮网络客户端和服务器的模块化可重用组件库。 * [`tracing`](前身是 `tokio-trace`):一个用于应用程序级追踪和异步感知诊断的框架。 * [`mio`]:一个基于操作系统 I/O API 的底层跨平台抽象,为 `tokio` 提供支持。 * [`bytes`]:用于处理字节的实用程序,包括高效的字节缓冲区。 * [`loom`]:一个用于 Rust 并发代码的测试工具。 ## 更新日志 Tokio 仓库包含多个 crates。每个 crate 都有自己的更新日志。 * `tokio` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio/CHANGELOG.md) * `tokio-util` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-util/CHANGELOG.md) * `tokio-stream` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-stream/CHANGELOG.md) * `tokio-macros` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-macros/CHANGELOG.md) * `tokio-test` - [查看更新日志](https://github.com/tokio-rs/tokio/blob/master/tokio-test/CHANGELOG.md) ## 支持的 Rust 版本