我了解到V8 JavaScript引擎是一种即时编译器。而PyPy是一个Python解释器,也是一个即时编译器。在多个线程存在的情况下,PyPy因具有全局解释器锁(GIL)而闻名。
V8 JavaScript引擎是否有类似于全局解释器锁(GIL)的东西来处理Web Worker线程?
所有动态语言都有处理多核的问题吗?如果是,为什么即时编译器会有全局解释器锁(GIL)的问题?
我了解到V8 JavaScript引擎是一种即时编译器。而PyPy是一个Python解释器,也是一个即时编译器。在多个线程存在的情况下,PyPy因具有全局解释器锁(GIL)而闻名。
V8 JavaScript引擎是否有类似于全局解释器锁(GIL)的东西来处理Web Worker线程?
所有动态语言都有处理多核的问题吗?如果是,为什么即时编译器会有全局解释器锁(GIL)的问题?
Chromium网页工作者是建立在V8隔离层之上的。每个隔离层本质上都是一个完全独立的V8虚拟机实例。许多隔离层可以共存于同一进程中并同时执行JavaScript代码。
然而,每个隔离层在任何给定时刻只能被一个线程拥有。有一个隔离层级别的锁定机制,嵌入式程序必须使用它来确保对隔离层的独占访问。
回答您的最后一个问题,我认为全局解释器锁(GIL)并不是动态解释或JIT编译语言必须具备的特征。例如,PyPy已经开始使用软件事务内存来消除GIL。PyPy和CPython存在GIL的原因更多是由于早期设计决策以及其内部数据结构不具备线程安全性。