Tokio 1.0 发布

2020 年 12 月 23 日

我们很高兴地宣布 Tokio 的 1.0 版本发布,Tokio 是 Rust 编程语言的异步运行时。Tokio 为编写可靠的网络应用程序提供了所需的构建块,且不影响速度。它提供了用于 TCP、UDP、定时器、多线程、工作窃取调度器等的异步 API。

多年来,我们很高兴看到我们的用户构建了令人惊叹的应用。例如,Discord 使用 Tokio 将尾部延迟降低了 5 倍。Fly.io 发现,借助 Tokio,他们可以轻松满足其性能需求,并专注于向客户交付功能。对于 Zcash 基金会 来说,基于 Tokio 构建使他们能够设计出抗误用的 API。对于 AWS,他们的 Lambda 团队使用 Tokio 实现了更可靠和灵活的服务。

教程是学习如何开始使用 Tokio 的最佳场所。

稳定性保证

我们最早在四年多前发布了 Tokio。从那时起,它发生了显著的演变。最值得注意的变化发生在一年之前,Rust 添加了 async 和 await。如今,Tokio 更易于使用且功能更强大。这种演变也带来了一些摩擦。它要求库跟踪这些变化,并且当意外依赖于多个 Tokio 版本时,可能会导致令人困惑的错误消息。

Tokio 1.0 版本的发布结束了这种动荡。作为发布的一部分,我们承诺为生态系统提供一个稳定的基础。我们目前没有 Tokio 2.0 的计划,并承诺至少 3 年内不会发布 Tokio 2.0 版本。我们计划至少维护 Tokio 1.0 分支 5 年。Tokio 将保持 6 个月的滚动 MSRV(最低支持 Rust 版本)策略。当提高 MSRV 时,新的 Rust 版本必须在至少六个月前发布。

这种稳定性并不意味着 Tokio 将会停滞不前。我们仍然有很多工作要做。

2021

我们期望在未来一年专注于以下几个领域:Streamio_uring、tracing 集成和 Tokio 栈。

Stream

目前,tokio-stream crate 提供了基于 Stream trait 的异步迭代实用程序。将 Stream traitfutures-core 移动到 Rust 标准库的 RFC 正在等待批准。

一旦标准库提供了 Stream trait,Tokio 的 stream 实用程序将移至 Tokio crate 本身。

io_uring

io_uring 是一个新的 Linux 接口,为所有类型的 I/O(包括磁盘)提供异步操作,同时减少所需的系统调用次数。目前,在 Linux 上,Tokio 使用 epoll(7) 接口,该接口众所周知不适用于磁盘访问。为了解决这个问题,Tokio 通过将同步操作分派到线程池来提供异步文件系统 API。虽然这可行,但并非最佳方案。

通过利用 io_uring,Tokio 将能够提供真正的异步文件系统操作。此外,io_uring 的早期基准测试非常有前景,我们希望这些性能改进能够延续到 Tokio 中。

tracing

围绕运行 Tokio 应用程序定义一流的故事将是 2021 年的重点。这个故事的重要组成部分将是围绕 tracing 和指标的工具。 tracing crate 已经提供了大部分所需的基础设施。它为结构化诊断实现了外观层和数据模型,允许库和应用程序都发出机器可读的数据,这些数据可以通过多种方式使用。

在未来一年中,我们将构建 tracing 和 Tokio 栈其余部分之间更深入的集成。这种集成将有助于提供对 Tokio 内部结构所需的可见性,以回答问题。例如,如何调整 Tokio 运行时以减少尾部延迟,了解当前正在运行的任务,或哪些锁竞争最激烈。

此外,我们将继续改进和发展 tracing 生态系统的其余部分。这包括致力于发布核心 tracingtracing-core crate 的新版本,向 Tokio 栈中的库添加更丰富的 instrumentation,并提供与其他诊断和可观察性工具的集成,例如 tracing-opentelemetry

Tokio 栈

Tokio 为标准原语(如套接字和定时器)提供了运行时和异步 API,但网络应用程序通常会使用更高级别的协议,如 HTTP 和 gRPC。Tokio 栈包括用于 HTTP 的 Hyper 和用于 gRPC 的 Tonic,以满足这些需求。今天,我们发布了 Hyper 0.14,它支持 Tokio 1.0。Tonic 也将很快更新。

随着 Tokio 1.0 的发布,我们还将专注于 Tower,这是一组用于构建可靠客户端和服务器的可重用组件。

感谢

没有我们众多的贡献者,Tokio 是不可能实现的,特别是 Alice Ryhl,她对项目做出了不可估量的贡献。感谢 Tokio 栈库的领导者:Sean McArthur (Hyper)、Lucio Franco (Tonic)、Eliza Weisman (Tracing) 和 Thomas De Zeeuw (Mio)。此外,没有 Aaron TuronAlex Crichton 早期的参与,Tokio 也不可能实现。

最后,非常感谢那些在经济上支持 Tokio 的公司:MozillaDropboxBuoyantAWS