主要观点:
- 有支持在动态语言的虚拟机中通过 API 启动多个线程的情况,这带来了保持运行时内部关键状态同步的挑战,如内存分配器、垃圾收集器、编译器等。
- 运行时实现者倾向于分片这些组件,每个线程有自己私用的部分,如单独的小堆,耗尽后请求全局停止事件,需解决如何指示所有线程停止的问题。
- VM 实现者通过将同步检查融入现有检查来解决,如 Skybison 融入栈溢出检查,V8 在 Maglev 的函数入口也类似,且并非所有应用都涉及常规函数调用,有时可在循环回边检查中断或进行其他线程同步检查,如 CPython、PyPy、Ruby 的 YARV 等,作者写此文是因为 PyPy 发布了使用类似技术的新功能,还提到了 guard pages 及相关参考文献。
关键信息:
- 虚拟机中多个线程启动及同步挑战。
- 运行时实现者的分片处理方式。
- 不同语言实现中同步检查的方式及示例代码。
- PyPy 新功能及相关内容。
重要细节:
- Skybison 把同步检查融入栈溢出检查,在帧推送时利用慢路径处理。
- V8 在 Maglev 的函数入口类似处理。
- CPython、PyPy、Ruby 的 YARV 在特定情况下在循环回边进行中断检查等。
- PyPy 新功能是将检查置于托儿所耗尽检查之后用于采样分析。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。