JavaScript 能否有同步的 `await`?

主要观点:在 JavaScript 中代码有“颜色”之分,即同步或异步,探讨了异步与同步代码的问题、同步await的修复方式及存在的两个实际问题(性能受影响、并发问题重要)等。
关键信息:

  • 异步代码与同步代码不同带来诸多问题,如功能需重复实现、API 设计困难等。
  • 异步await利用execution contexts实现暂停和恢复执行,如多个异步函数调用会记录栈信息。
  • 同步await可在同步代码中使用await,但会带来性能下降和并发问题等。
    重要细节:
  • 同步代码不能直接调用异步代码,导致功能重复和 API 设计受限。
  • 异步await的执行步骤及与执行上下文的关系。
  • 同步await可能导致性能下降的原因,如函数调用需可恢复及存储恢复栈的开销。
  • 同步await可能影响事件处理程序,需使用互斥锁等处理并发问题。
  • 语法上可能需要sync关键字启用同步await,且仍需Promises作为基础,WebAssembly 中有关于栈切换的提案。
阅读 4
0 条评论