#1135·rayon

一个 yield_now/yield_local 选项,允许线程进入休眠状态

作者: james7132创建于 2024年2月25日更新于 2026年7月16日
标签help wanted

我们正在研究使用rayon作为Bevy的线程池和调度器,其中一部分需要能够将未来对象调度到任务池中。在 #679 的讨论中,我们已经部分实现了此功能,但我们遇到了问题,`futures::block_on` 等价物无法以使线程进入休眠状态的方式交出给线程池,也无法按需将特定线程唤醒。`futures_lite::block_on` 和它的变体使用 `parking` 或 `std::thread::park` 中的标准等价物来停止线程,但rayon并没有提供此级别控制的选项。使用上述选项停止线程会导致过度的 CPU 使用和竞争,这可能是由于与rayon内部线程管理状态相冲突。一个在调用时钩入内部线程休眠状态的 `yield_sleep` 或 `yield_park` 等价物,以及一个我们可以封装为 `Waker` 的相应数据类型将会非常有用。