为什么CPython实现了GIL而V8没有?

问题描述 投票:0回答:1

我正在寻求有关 CPython 决定使用 GIL 与 V8、JavaScript 引擎或其他不使用 GIL 的见解的见解。

虽然我知道没有一种语言可以在所有方面都表现出色,但我对性能考虑因素很感兴趣,特别是在服务器端和 API 相关任务中。

我有兴趣比较它与其他动态语言的实现的优缺点。任何见解将不胜感激。谢谢!

v8 jit cpython gil
1个回答
0
投票

我对Python了解不多,但我了解V8,所以我可以从这个角度尝试一下。

我的理解是,GIL(“全局解释器锁”,对于那些不熟悉该术语的人来说)主要是一种简单而强大(=不易出错)的方法来实现具有多线程功能的语言的解释器,并且它当您假设实际上不会有太多线程时,甚至可能会带来性能优势。但是一旦有了 GIL,它就会阻碍扩展到多个核心,而且很难摆脱它。因此,在 Python 的早期,其开发人员决定依赖 GIL“目前已经足够好了”,而现在他们正在努力摆脱它。您可以在PEP 703阅读有关动机和挑战的更多详细信息。

V8的情况则截然不同,所以直接比较有点困难。与 Python 相反,JavaScript 是单线程的,因此 V8 从来不需要处理 GIL 帮助解决的语言并发问题。 V8 确实在内部使用了一定量的线程(主要用于 GC 和编译器),但所有这些都被设计为不依赖于 GIL(而是尽可能避免锁定,并在需要锁定时使用细粒度锁)。即使现在 JavaScriptWebAssembly 正在考虑添加多线程功能,负责任的开发人员也很清楚 GIL 对于扩展来说是多么不幸,因此规范不会假设存在一个,并且引擎( V8 和其他)不会实现。

FWIW,是否使用 GIL 与你的语言是否是动态的几乎没有关系,也与你的引擎是否使用抖动无关。

© www.soinside.com 2019 - 2024. All rights reserved.