主要观点:在 JavaScript 中代码有“颜色”之分,即同步或异步,探讨了异步与同步代码的问题、同步await
的修复方式及存在的两个实际问题(性能受影响、并发问题重要)等。
关键信息:
- 异步代码与同步代码不同带来诸多问题,如功能需重复实现、API 设计困难等。
- 异步
await
利用execution contexts
实现暂停和恢复执行,如多个异步函数调用会记录栈信息。 - 同步
await
可在同步代码中使用await
,但会带来性能下降和并发问题等。
重要细节: - 同步代码不能直接调用异步代码,导致功能重复和 API 设计受限。
- 异步
await
的执行步骤及与执行上下文的关系。 - 同步
await
可能导致性能下降的原因,如函数调用需可恢复及存储恢复栈的开销。 - 同步
await
可能影响事件处理程序,需使用互斥锁等处理并发问题。 - 语法上可能需要
sync
关键字启用同步await
,且仍需Promises
作为基础,WebAssembly 中有关于栈切换的提案。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。