Hasty Briefsbeta

双语

A Design Space Exploration of Async/Await

21 days ago
  • 许多语言使用async/await使并发程序看起来像直线代码,称为直线异步。
  • 尽管原理相似,但不同语言中async/await的实现差异显著,对于一段简单的伪代码程序,七个运行时有四种不同的输出结果。
  • 关键设计维度:急切性(热启动与冷启动)决定了异步函数是立即执行还是等到被等待时执行。
  • 识别出九个设计维度,分为生命周期开始(急切性、暂停)、生命周期结束(范围、引用强度、销毁、传播)和取消(感知、方向、持久性)。
  • 范围与销毁的选择解释了不同的输出结果:Swift使用动态范围与取消销毁(输出AC),而Trio使用动态范围与等待销毁(输出ABC)。
  • 每个维度都在性能、内存、人体工程学和语义方面存在权衡;没有绝对正确或错误的选择。
  • 开发了一个基于核心演算的形式语义,以精确建模和追踪跨语言的执行差异。