
Rust 生态中,不谈官方的 Future trait,成熟可供生产环境使用的异步运行时,主要有三类:
tokio。生态最为强大,是生产中使用最多的运行时。它具有高性能、可定制且灵活的执行器。不管从哪一方面说,都是 Rust 生态中最值得信赖的一部运行时。smol 和 async-std,实质是近乎一个团队的贡献。起初 stjepang 启动了 smol-rs 项目,目标是使 async-std 灵活的内部设计,可以供其它运行时重用。后来,async-std 的基础核心,也是基于 smol 的;而 smol 的则直接用到了 async-std 团队创建的 surf、tide 等。glommio。基于 thread-per-core 哲学并使用 io_uring 实现的专用运行时。与 Tokio 和 async-std 不同,Glommio 不是通用的异步运行时,也不包含诸如AsyncReadtrait 之类的东西。但对于它的应用场景,它是一个完整的解决方案。目前,web 开发方面,笔者了解到支持 glommio 运行时的,有 actix-web 创建者的新项目 ntex。另外,还有专为嵌入式开发设计的运行时 embassy,以及 bastion 等等。
笔者喜欢 async-std 的 API 设计,所以手头的 Rust Web 方面的项目,也主要是采用 async-std,以及基于其的 web 框架 tide。这两个 crate,均很久没有实质有用的更新了。
最近,reddit 前后出现了 2 个帖子,一个是 async-std 是二等公民吗?;一个则更直接 sqlx 考虑移除其对 async-std 的支持,并发出灵魂拷问 “who would use async-std?!”;后续,github 中还有多个知名 crate 也提出此类放弃支持的讨论。因此,笔者也对其给予了很多的关注,将 async-std 自从 6 个月前版本发布后的提交历史,逐一看了一遍。
终于,在 2022 年 2 月 11 日,yoshuawuyts 在一个名为 和 tokio 比较(Tokio comparison) 的 issue 中,对一位用户的发言 “And what might be even more important - is the project dead?”,做了还算详细的回复。大约是以下几个意思——
smol 在 1 月份做了一次更新,所以虽然进度缓慢,但一直在推动。stjepang 的工作(I don’t believe Stjepan works in Rust at all …),其不再是 async-std 核心团队的一员。tokio 相比 async-std 来说,使用它肯定不会收到任何指责(说话的艺术啊! :-D)这些回应虽然并没有解决提出 issue 和 pr 的开发者心中的担忧,因为 issue 和 pr 还是没人理;tide 仍旧是 issue 都基本没人提了,pr 堆积近百。
但是,对于喜欢 async-std 和 tide 的开发者和用户,至少保留了一份期待吧 :-)
附文中提到的 url: