首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Java虚拟机中没有GIL?为什么Python如此迫切地需要一个?

为什么Java虚拟机中没有GIL?为什么Python如此迫切地需要一个?
EN

Stack Overflow用户
提问于 2009-06-14 01:12:56
回答 5查看 19K关注 0票数 186

我希望有人能提供一些洞察力,说明Java虚拟机有什么根本的不同,它允许它很好地实现线程,而不需要全局解释器锁(GIL),而Python需要这样的邪恶。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-14 01:20:56

Python (这种语言)不需要GIL (这就是为什么它可以在JVM、Jython和.NET IronPython上完美地实现,并且这些实现可以自由地多线程)。CPython (流行的实现)一直使用GIL来简化编码(特别是。垃圾收集机制的编码)和非线程安全的C编码库的集成(过去有很多这样的库;-)。

在其他雄心勃勃的目标中,Unladen Swallow项目确实plan了一个用于Python的无GIL虚拟机--引用该站点的话说,“此外,我们打算移除GIL并修复Python中的多线程状态。我们相信,通过实现一个更复杂的GC系统,这是可能的,就像IBM的Recycler一样(Bacon et al,2001)。”

票数 229
EN

Stack Overflow用户

发布于 2009-07-22 01:27:17

JVM (至少hotspot)确实有类似于"GIL“的概念,只是它的锁粒度更细,其中大部分来自hotspot中更高级的GC。

在CPython中,它是一个很大的锁(可能不是那么正确,但对于参数来说已经足够好了),在JVM虚拟机中,它更多地是通过不同的概念传播的,具体取决于它的使用位置。

例如,看看hotspot代码中的vm/ the /safepoint.hpp,这实际上是一个障碍。一旦到达安全点,整个VM就停止了java代码,就像python VM在GIL停止一样。

在Java世界中,这样的VM暂停事件被称为“停止世界”,在这些点上,只有绑定到特定条件的本机代码是自由运行的,VM的其余部分已经停止。

此外,java中缺少粗锁使得JNI更难编写,因为JVM对其FFI调用环境的保证较少,这是cpython使之相当容易的事情之一(尽管不像使用ctype那么容易)。

票数 56
EN

Stack Overflow用户

发布于 2010-04-13 05:45:11

在这篇博文http://www.grouplens.org/node/244下面有一条评论,暗示了为什么在IronPython或Jython上这么容易省去GIL的原因,那就是CPython使用引用计数,而其他两个VM都有垃圾收集器。

我不明白为什么会这样的确切机制,但这听起来确实是一个合理的理由。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/991904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档