Hasty Briefsbeta

双语

The Tokio/Rayon Trap and Why Async/Await Fails Concurrency

4 hours ago
  • #concurrency
  • #async_await
  • #system_design
  • Async/await 通过让异步代码看起来像同步代码来简化其编写,但隐藏了调度和控制流中的复杂性,将负担转移给了开发者。
  • Async/await 中将异步和并发混为一谈可能导致生产问题,例如 CPU 密集型任务阻塞协作运行时引起的延迟激增。
  • 开发者必须手动将 I/O 和计算任务分离到不同的运行时(如 Tokio 和 Rayon)中,充当“人工调度器”,这削弱了该抽象所承诺的优势。
  • Async/await 运行时通常默认采用无界容量,导致在流量激增期间,由于任务不受控制地生成和排队,引发内存不足崩溃。
  • 旨在实现公平性的工作窃取调度器可能会通过破坏 CPU 缓存局部性并引发争用而降低吞吐量,这在 Erlang BEAM 等大型系统中已得到印证。
  • Tina 项目被引入作为一种基于状态机的替代并发框架,其特点包括每核一线程的设计、严格的边界以及用于可预测性的确定性模拟测试。