主要观点:Rust 有蓬勃发展的异步系统,IO 重的应用可使用异步,通过“use async”提高效率,学习添加 Tokio 可实现更多功能。异步函数是普通函数的语法糖,会生成实现Future trait 的复杂状态机,Future trait 简单但重要,包含Output和poll方法。同时介绍了Future的示例,展示其工作流程。异步系统的另一部分是执行器,主要负责轮询Future、睡眠和提供唤醒机制,标准库中有一个有意带有错误的执行器实现。介绍了 Beul 这个基于上述理念的安全、极简的 futures 执行器,它代码简洁,仅 84 行,公共 API 为pub fn execute<T>(f: impl Future<Output = T>) -> T,可用于测试异步代码和在同步代码中使用异步库,还对比了其他类似的极小执行器 crate,如 Pollster、futures-executor、extreme、Yaar 和 safina-executor,目前 Beul 可认为“已完成”,随着未来 Rust 异步标准库的发展,Beul 也会相应支持。
关键信息:
- Rust 异步系统中异步函数与
Futuretrait 的关系。 Futuretrait 的定义和示例。- 执行器的作用和工作流程。
- Beul 执行器的特点和用途。
重要细节:
Futuretrait 的Output关联类型表示最终返回类型,poll方法检查异步过程是否完成并返回Poll::Ready或Poll::Pending。- 示例
Future通过线程完成异步操作,包含检查是否完成、启动线程、标记完成和唤醒等步骤。 - 执行器主要轮询
Future,等待唤醒后继续,标准库中有示例执行器但存在错误。 - Beul 执行器简洁,代码 84 行,公共 API 为
execute函数,可用于嵌套调用和在同步代码中使用异步。 - 对比了其他类似极小执行器 crate 的特点和差异。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。