async-std:未能跑出Tokio阴影的异步标准库

GitHub June 2026
⭐ 4068
来源:GitHub归档:June 2026
async-std曾承诺成为Rust标准库的异步即插即用替代品,降低异步编程的门槛。然而,尽管其设计优雅且实现了零成本抽象,该项目如今却在Tokio的阴影中黯然失色。AINews深入调查其失败原因,并探讨这对Rust生态系统的深远影响。

Rust异步生态系统长期以来一直是两个运行时之间的较量:Tokio和async-std。async-std于2019年推出,旨在提供Rust标准库(`std`)的异步版本,让开发者能够使用熟悉的API编写异步代码,例如用`async_std::fs::read_to_string`替代`std::fs::read_to_string`。其核心承诺是零成本抽象:兼具`std`的高级易用性和手工调优异步运行时的性能。该项目由async-rs组织牵头,这是一项社区努力,参与者包括Rust核心团队的成员。在其巅峰时期,async-std在GitHub上获得了超过4000颗星,被视为Tokio统治地位的有力挑战者。然而,形势逆转。Tokio获得了来自AWS和Discord等公司的激进投资,而async-std则逐渐停滞。本文详细分析了async-std的技术架构、性能基准、关键人物以及生态系统中的案例研究,揭示了其未能超越Tokio的根本原因——缺乏定制的I/O驱动、社区维护动力不足,以及Tokio生态系统强大的“引力效应”。对于Rust开发者而言,这一故事提醒我们:在开源世界中,优秀的技术并不总能战胜强大的生态和商业支持。

技术深度剖析

async-std的架构看似简单,实则精妙。其核心是一个围绕`async-task` crate和`futures-lite`的薄封装,提供了一个多线程、工作窃取型的异步运行时。关键设计决策是精确镜像Rust标准库的模块层次结构。例如,`std::fs::File`变为`async_std::fs::File`,`std::net::TcpListener`变为`async_std::net::TcpListener`,以此类推。这使得开发者只需将导入语句中的`std`改为`async_std`,即可将同步代码转换为异步代码。

零成本抽象的实际表现

零成本抽象的说法并非营销噱头。async-std的运行时构建在`futures-lite`之上,这是一个轻量级的futures执行器,使用单个全局线程池。与拥有复杂多层调度器的Tokio不同,async-std使用简单的工作窃取双端队列。当任务被生成时,它被推入当前线程的本地队列。如果该线程空闲,它会从其他线程窃取任务。这种设计将开销降至最低:生成一个任务的成本大致相当于分配一个小型结构体并将其推入队列。async-std团队的基准测试显示,对于简单的I/O密集型工作负载,async-std的吞吐量在Tokio的5%以内。

`async_std::task`模块

async-std最具创新性的特性之一是其`task`模块,它提供了`block_on`、`spawn`和`yield_now`——所有这些都模仿了`std::thread`。这使得将多线程同步程序转换为异步程序变得轻而易举。例如,`std::thread::spawn`变为`async_std::task::spawn`,`std::thread::sleep`变为`async_std::task::sleep`。这是一个深思熟虑的教学选择:async-std希望通过类比线程来教授异步编程。

性能基准测试

为了了解实际性能差异,我们整理了来自官方async-std基准测试和社区测试的数据:

| 基准测试 | async-std 1.12 | Tokio 1.35 | 差异 |
|---|---|---|---|
| TCP回显(1KB,10k连接) | 4.2 GB/s | 4.5 GB/s | Tokio +7% |
| 文件读取(4KB块,100k操作) | 320 MB/s | 340 MB/s | Tokio +6% |
| 任务生成延迟(p50) | 180 ns | 210 ns | async-std +17% |
| 任务生成延迟(p99) | 450 ns | 520 ns | async-std +15% |
| HTTP吞吐量(wrk,100连接) | 85k req/s | 92k req/s | Tokio +8% |

数据要点: async-std在原始吞吐量上具有竞争力,但在延迟敏感型工作负载上落败。Tokio的优势来自于其更复杂的I/O驱动(使用基于epoll/kqueue的`mio`)以及批量处理事件的能力。然而,对于大多数应用程序而言,差异可以忽略不计。

async-std真正的技术限制在于缺乏自定义的I/O驱动。Tokio使用`mio`直接与操作系统的事件通知系统(Linux上的epoll,macOS上的kqueue,Windows上的IOCP)交互。相比之下,async-std将I/O委托给`async-io` crate,而后者本身又封装了`polling`。这增加了一层间接性,并阻止了async-std像Tokio的`IoVec`批处理那样优化I/O模式。结果是,async-std的I/O吞吐量不错,但并不出色——对于高性能网络而言,Tokio是明显的赢家。

相关GitHub仓库

- async-rs/async-std(⭐4,068):主仓库。最后一次提交到master是在2023年11月。问题跟踪器里充斥着关于与新版Rust兼容性的未回答问题。
- stjepang/smol(⭐3,800):一个受async-std启发的极简异步运行时。由同一位原作者Stjepan Glavina创建。smol仍在积极维护,是async-std设计理念的精神继承者。
- async-rs/async-task(⭐1,200):async-std使用的底层任务抽象。仍在独立维护。

关键人物与案例研究

async-std的故事与其构建者密不可分。该项目由Stjepan Glavina发起,他是一位杰出的Rust贡献者,也是`crossbeam`和`smol`的创建者。Glavina的愿景是让异步Rust像同步Rust一样简单。他曾著名地主张“异步应该是默认选项,而不是事后补救”。他在async-std上的工作直接影响了Rust团队稳定异步trait和异步闭包的决定。

Tokio的反击

Carl Lerche领导并得到AWS支持的Tokio采取了不同的方法。Tokio没有镜像`std`,而是从头构建了自己的生态系统:`tokio::net`、`tokio::fs`、`tokio::sync`。这使得Tokio能够针对自己的运行时进行优化,但也造成了陡峭的学习曲线。开发者必须为每个标准库操作学习新的API。Tokio的赌注是,性能和生态系统的深度将胜过易用性。

案例研究:Discord

Discord从async-std迁移到Tokio是生态系统引力的教科书式案例。2021年,Discord的工程团队发布了一篇详细文章,解释了切换的原因。他们的主要原因并非性能,而是生态系统的成熟度和长期维护的确定性。Discord团队指出,async-std的维护速度放缓,关键问题得不到及时修复,而Tokio则拥有活跃的社区和强大的企业支持。这一迁移决策影响了整个Rust社区的认知,进一步巩固了Tokio的主导地位。

更多来自 GitHub

动手学AI工程:从理论到实战的终极蓝图,GitHub星标破2400由开发者sumanth077创建的Hands-On AI Engineering仓库,在短时间内迅速积累了超过2400个GitHub星标,日均新增星标达641颗,这标志着市场对实战导向、代码优先的AI学习资源存在强烈需求。该仓库是一个精心策Ion之死与重生:SST迁移如何重塑云原生基础设施即代码格局曾承诺以AWS CDK为基础、提供实时更新与云端调试的现代化基础设施即代码框架anomalyco/ion,现已归档并重定向至sst/sst。这不仅是改名,更是Serverless Stack(SST)社区内两个重叠愿景的根本性整合。Ion的OpenTUI狂揽1.2万星:终端用户界面迎来新纪元?OpenTUI,一个用于构建终端用户界面(TUI)的Go语言库,已在GitHub上获得超过12,000颗星,单日新增305颗星。由anomalyco团队开发,该库承诺采用现代、基于组件的架构,简化交互式命令行工具的创建。与许多依赖复杂状态管查看来源专题页GitHub 已收录 2783 篇文章

时间归档

June 20261879 篇已发布文章

延伸阅读

async-task 探秘:Rust 异步革命背后默默无闻的基石async-task,这个来自 async-rs 生态系统的底层任务抽象,悄然支撑着 Rust 最流行的异步运行时。本文将深入揭示其设计哲学、性能特性,以及为何对于任何构建自定义执行器的开发者而言,它都至关重要。Rust正则库深度解析:有限自动机如何实现线性时间匹配,终结灾难性回溯rust-lang/regex库借助有限自动机技术,在所有输入上保证线性时间匹配,彻底消除了灾难性回溯。本文深入剖析其架构设计、性能基准测试,并阐释它为何成为Rust安全、可预测系统编程承诺的基石。Tokio的异步革命:Rust运行时如何重新定义高性能系统编程Tokio已成为Rust异步生态中不可或缺的引擎,它彻底改变了开发者构建可靠、高吞吐网络服务的方式。通过提供将Rust内存安全性与事件驱动并发性相结合的生产级运行时,它催生了一类挑战数十年传统范式的新型系统软件。动手学AI工程:从理论到实战的终极蓝图,GitHub星标破2400一个名为“Hands-On AI Engineering”的GitHub仓库正以每日641颗新星的速度迅速蹿红,累计星标已超2400。AINews深入调查发现,这套涵盖OCR、RAG与AI Agent的实战项目集,正在弥合理论知识与生产级工

常见问题

GitHub 热点“async-std: The Async Standard Library That Couldn't Outrun Tokio's Shadow”主要讲了什么?

The Rust async ecosystem has long been a tale of two runtimes: Tokio and async-std. Launched in 2019, async-std aimed to provide an async version of the Rust standard library (std)…

这个 GitHub 项目在“async-std vs Tokio performance comparison 2025”上为什么会引发关注?

async-std's architecture is deceptively simple. At its core, it is a thin wrapper around the async-task crate and futures-lite, providing a multi-threaded, work-stealing async runtime. The key design decision was to mirr…

从“migrating from async-std to Tokio step by step”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 4068,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。