异步编程深入解析
1. Pin 与安全调用
在异步编程中,对 Pin::new_unchecked 的调用确保了生成器状态被固定。由于 pinned 存储在与异步块对应的生成器中(这样 yield 才能正确恢复),我们知道 pinned 不会再移动。并且,一旦进入循环,除了通过 Pin 之外无法访问 pinned ,所以没有代码能够移动 pinned 中的值。因此,我们满足了 Pin::new_unchecked 的所有安全要求,代码是安全的。
2. 进入休眠状态
在处理 Future 时,如果 Future::poll 返回 Poll::Pending ,就需要有一个东西在稍后再次调用 poll 来检查是否可以继续推进。这个东西通常被称为执行器。简单的执行器可能是一个简单的循环,不断轮询所有等待的 Future ,直到它们都返回 Poll::Ready ,但这样会消耗大量的 CPU 周期。更好的做法是,执行器先做一些有用的工作,然后进入休眠状态,直到某个 Future 可以继续推进时再唤醒,完成一轮操作后再次休眠。
3. 唤醒机制
3.1 唤醒条件的多样性
决定何时
Rust异步编程核心机制解析
超级会员免费看
订阅专栏 解锁全文
1436

被折叠的 条评论
为什么被折叠?



