< 返回版块

w 发表于 2021-03-23 09:00

Tags:async

最近在学习rust的异步编程。在async-std的中文文档里看到比较future,future-rs的关系,但看了下没有看懂。我的理解是前两者是rust标准库std::future::Future的实现。而tokio则不是。不知道是这样吗?

评论区

写评论
phper-chen 2021-03-25 10:21

tokio就好 基于mio 集成度更高 其他都是历史产物 实现有不足之处

gwy15 2021-03-23 20:40

以前(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 是一个更新一点的运行时。

c5soft 2021-03-23 11:14

简单的说,std::future规定了标准,async-std、tokio等都是按标准做产品的厂家,这些厂家中tokio历史最悠久,产品最可靠。

作者 w 2021-03-23 09:20

看了几页发现不只是滞后严重的问题啊,这翻译和谷歌翻译有一拼。

--
👇
Mike Tang: 另外,中文文档严重滞后,不推荐阅读。

Mike Tang 2021-03-23 09:11

另外,中文文档严重滞后,不推荐阅读。

Mike Tang 2021-03-23 09:11

无脑跟 tokio 就行了,其他可以不管。

1 共 6 条评论, 1 页