推荐:Tokio——Rust编程语言的高性能异步运行时

推荐:Tokio——Rust编程语言的高性能异步运行时

Tokio是一个为Rust编程语言设计的高效、可靠且轻量级的应用程序运行时环境。它以三大特性脱颖而出:

  1. 快速:Tokio通过零成本抽象提供接近硬件性能的速度。
  2. 可靠:Tokio利用Rust的所有权、类型系统和并发模型,减少错误并确保线程安全性。
  3. 可扩展:其占用资源极小,并自然地处理背压和取消任务。

Crates.io MIT licensed Build Status Discord chat

网站 | 教程 | API 文档 | 聊天室

概览

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都能提供强大而稳定的基础设施来构建下一代应用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杭臣磊Sibley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值