我读到 V8 Javascript 引擎是一个即时编译器。PyPy 是一个 Python 解释器,也是一个即时编译器。PyPy 以在存在多个线程的情况下具有 GIL 而闻名。
V8 Javascript 引擎是否有类似于全局解释器锁 (GIL) 的东西来处理 Web 工作线程?
并且所有动态语言在处理多核时都有问题吗?如果是这样,为什么 JIT 编译器会在 GIL 上出现问题?
我读到 V8 Javascript 引擎是一个即时编译器。PyPy 是一个 Python 解释器,也是一个即时编译器。PyPy 以在存在多个线程的情况下具有 GIL 而闻名。
V8 Javascript 引擎是否有类似于全局解释器锁 (GIL) 的东西来处理 Web 工作线程?
并且所有动态语言在处理多核时都有问题吗?如果是这样,为什么 JIT 编译器会在 GIL 上出现问题?
Chromium Web Workers 是在 V8 Isolates 之上实现的。每个 Isolate 本质上都是一个完全独立的 V8 VM 实例。许多 Isolate 可以在同一个进程中共存并同时执行 JavaScript 代码。
然而,在任何给定时刻,每个 Isolate 只能由单个线程拥有。嵌入器必须使用Isolate 级别的锁定机制来确保对 Isolate 的独占访问。
要回答您的最后一个问题,我认为 GIL 不一定必须存在于动态解释或 JIT 编译语言中。例如,PyPy 已经完成了一些使用软件事务内存消除 GIL 的初步工作。PyPy 和 CPython 拥有 GIL 的事实更多地与它们历史上较早做出的设计决策以及它们的内部数据结构不是线程安全的事实有关。