2013-01-19 89 views
8

我读到V8 Javascript引擎是一个即时编译器。 PyPy是一个Python解释器,也是一个即时编译器。 PyPy以存在多线程的GIL而闻名。V8 JavaScript引擎是否有GIL?

V8 Javascript引擎是否具有与全局解释器锁定(GIL)相当的功能来处理Web工作线程?

那么所有的动态语言在处理多核问题时都会遇到问题吗?如果是的话,为什么JIT编译器在使用GIL时会遇到问题?

+0

[HotSpot有一个JIT编译器,但它没有单个GIL,而是它有一系列更精细的锁](http://stackoverflow.com/q/991904/309483)。 –

+0

WebWorkers不能做太多的I/O,所以我会想象一个GIL对他们来说不是什么问题... –

回答

12

Chromium Web Workers在V8隔离区之上实现。每个隔离本质上都是一个完全独立的V8 VM实例。许多隔离可以在同一个进程中共存并且同时执行JavaScript代码。

但是每个隔离只能由任何给定时刻的单个线程拥有。有一个隔离级别锁定机制,嵌入程序必须用于确保独占访问隔离。

+4

你能翻译成简单的英文吗? –

+0

@AlexMills答案的哪一部分不清楚? –

+0

嗯,你能解释为什么这意味着V8有或没有GIL。我相当肯定它不会,但你需要让读者更清楚。根据我的理解,拥有单个线程意味着它不需要GIL。 –

3

要回答你的最后一个问题,我不认为GIL必须在动态解释或JIT编译语言中出现。例如,PyPy已经在使用软件事务内存来消除GIL方面做了一些初步工作。 PyPy和CPython拥有GIL的事实更多地与它们历史上早些时候做出的设计决策以及其内部数据结构不是线程安全的事实有关。