推荐:Tokio——Rust编程语言的高性能异步运行时
Tokio是一个为Rust编程语言设计的高效、可靠且轻量级的应用程序运行时环境。它以三大特性脱颖而出:
- 快速:Tokio通过零成本抽象提供接近硬件性能的速度。
- 可靠:Tokio利用Rust的所有权、类型系统和并发模型,减少错误并确保线程安全性。
- 可扩展:其占用资源极小,并自然地处理背压和取消任务。
概览
Tokio是一个事件驱动、非阻塞的I/O平台,非常适合编写异步应用。它的核心组件包括:
- 多线程、工作窃取型任务调度器。
- 基于操作系统事件队列(如epoll, kqueue, IOCP等)的反应器。
- 异步TCP和UDP套接字。
这些组件为构建异步应用程序提供了必要的运行时支持。
示例
以下是一个使用Tokio的基本TCP回声服务器示例:
首先,在Cargo.toml中确保启用了Tokio的完整功能:
[dependencies]
tokio = { version = "1.36.0", features = ["full"] }
然后在main.rs中:
use tokio::net::TcpListener;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
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];
// 循环读取数据并回写到socket
loop {
let n = match socket.read(&mut buf).await {
// socket关闭
Ok(n) if n == 0 => return,
Ok(n) => n,
Err(e) => {
eprintln!("未能从socket读取数据;err = {:?}", e);
return;
}
};
// 写回数据
if let Err(e) = socket.write_all(&buf[0..n]).await {
eprintln!("未能向socket写入数据;err = {:?}", e);
return;
}
}
});
}
}
更多示例可以在此处找到。对于更大型的“实际案例”,请查看mini-redis仓库。
要查看可用的特性标志列表,请参阅我们的文档。
获取帮助
首先,查看指南或API文档是否能解答您的疑问。如果找不到答案,我们欢迎您加入Tokio Discord服务器提问。您也可以在讨论区提出问题。
贡献
🎉 感谢您的贡献!我们很高兴您能参与!我们有详细的贡献指南来指导您如何参与到Tokio项目中来。
相关项目
Tokio项目维护了多个相关库,包括:
tonic
: 高性能、互操作性、灵活的gRPC over HTTP/2实现。tracing
(原名tokio-trace
):面向应用程序的追踪框架和异步感知诊断工具。mio
: 低层次、跨平台的OS I/O API抽象,是Tokio的基础。
更新日志
Tokio仓库包含了多个crate,每个都有自己的更新日志。
支持的Rust版本
Tokio保持滚动的MSRV(最小支持的Rust版本)政策,至少6个月。增加MSRV时,新的Rust版本必须已发布至少六个月。当前的MSRV是1.63。
请注意,虽然我们尽量避免依赖项间接增加Tokio的MSRV,但我们不能保证这种情况不会发生。但是,每个次要发行版都将与该次要发行版支持的一组依赖版本配合使用。
发布计划
Tokio没有固定的发布周期,但通常每月会进行一到两次次要版本的发布。我们需要的时候会做补丁版本以修复bug。
Bug修复策略
为了制作包含bug修复的补丁版本,我们指定了一些次要版本作为LTS(长期支持)版本。每当一个bug需要补丁版本修复时,都会将修复后的新版本发布给所有LTS次要版本。当前的LTS版本是:
1.32.x
- LTS版本,支持至2024年9月。(MSRV 1.63)1.36.x
- LTS版本,支持至2025年3月。(MSRV 1.63)
每个LTS版本将至少持续一年接收回溯修复的更新。如果您希望在项目中使用固定次要版本,建议您使用LTS版本。
要使用固定次要版本,可以使用波浪符指定版本。例如,指定使用最新1.32.x
补丁版本的方法如下:
tokio = { version = "~1.32", features = [...] }
先前的LTS版本
1.8.x
- LTS版本,支持至2022年2月。1.14.x
- LTS版本,支持至2022年6月。1.18.x
- LTS版本,支持至2023年6月。1.20.x
- LTS版本,支持至2023年9月。1.25.x
- LTS版本,支持至2024年3月。
许可证
本项目遵循MIT许可证。
贡献
除非您明确表示其他方式,否则您故意提交的任何对Tokio的贡献,都应按照MIT许可条款授权,不附加任何额外的条款或条件。
Tokio以其卓越的技术特性和广泛的应用场景,无疑是Rust社区开发高并发、高性能服务的理想选择。无论是新手还是经验丰富的开发者,Tokio都能提供强大而稳定的基础设施来构建下一代应用。