最近在学习rust的异步编程。在async-std
的中文文档里看到比较future
,future-rs
的关系,但看了下没有看懂。我的理解是前两者是rust标准库std::future::Future
的实现。而tokio
则不是。不知道是这样吗?
1
共 6 条评论, 1 页
最近在学习rust的异步编程。在async-std
的中文文档里看到比较future
,future-rs
的关系,但看了下没有看懂。我的理解是前两者是rust标准库std::future::Future
的实现。而tokio
则不是。不知道是这样吗?
评论区
写评论tokio就好 基于mio 集成度更高 其他都是历史产物 实现有不足之处
以前(1.39.0)以前,rust 是不支持 async/await 的,异步的实现完全由第三方实现(future-rs 的
Future
宏),用#[future]
+await!
和代码生成实现;这样做会生成很多可读性很差的代码,很痛苦。后来 rust 稳定了 async/await,把 Future trait 移入了 std,把生成代码的部分逻辑加入到语言层面。
但是根据 rust 最简原则,只加入了生成状态机的部分,具体的 executor 和 reactor(对这两个概念不熟悉的话去看看 async book)是不提供的。更常见的说法就是, 运行时 是不提供的。需要用第三方的运行时。
最常见的运行时就是 tokio,这个库也在生产环境被考验了很久了。如果要运行异步函数,那么就可以用 tokio 来运行。
现在
futures
crate 提供的是更多的 trait,比如FutureExt
,带来更多类似 std 下的 Iterator 的抽象。futures
crate 不提供运行时(准确地说,不提供 reactor。)async-std
是一个更新一点的运行时。简单的说,std::future规定了标准,async-std、tokio等都是按标准做产品的厂家,这些厂家中tokio历史最悠久,产品最可靠。
看了几页发现不只是滞后严重的问题啊,这翻译和谷歌翻译有一拼。
--
👇
Mike Tang: 另外,中文文档严重滞后,不推荐阅读。
另外,中文文档严重滞后,不推荐阅读。
无脑跟 tokio 就行了,其他可以不管。