一张图搞懂Rust异步编程
异步编程作为炙手可热的编程技术,使用Rust语言要实现异步编程,相对比较复杂,因为它涉及语言特性、标准库类型、第三方运行环境库等;现尝试用一张图让您搞懂Rust异步编程:
一张图搞懂Rust异步编程
补充说明上图涉及的内容:
语言特性相关:
async:作为Rust语言关键词,编译器通过将指定async修饰代码块去语法糖的形式生成GenFut对象及其对应可异步执行函数;
await:作为Rust语言关键词,编译器通过去语法糖的形式完成对GenFut对象的poll方法调用及内部状态的维护;
标准库类型相关
Future:定义一个Future对象需要实现的trait;
Context/Waker:提供Future对象poll方法调用参数定义及唤醒接口约定;
Pin:实现调用Future对象poll方法时对被调用对象的约束访问;
第三方库等相关
Future运行环境库:比如tokio/async-std,提供运行Future对象的运行环境,触发Future对象的异步执行、唤醒等;
pin-project库:对Pin机制的一种扩展,以方便实现子字段的Pin封装;
参考:
https://rust-lang.github.io/async-book/
https://cfsamson.github.io/books-futures-explained/