为什么没有GIL在Java虚拟机?为什么Python需要一个那么坏吗?
-
13-09-2019 - |
题
我希望有人可以提供一些见解什么是根本不同有关Java虚拟机,允许它实施线好不需要一个全球性的解释锁(GIL),同时Python需要这样的邪恶。
其他提示
在JVM(至少热点)确实有类似的理念,以“GIL”,这是在其锁的粒度只是精细多了,大多数的这种来自哪个更先进的GC在热点。
在CPython中它是一个大锁(可能不是真实的,但为了讨论不够好),在JVM它是关于与取决于它是用在不同的概念更加蔓延。
看看,例如,在热点代码,VM /运行/ safepoint.hpp,这实际上是一个障碍。一旦在一个还原点整个虚拟机已经停止相对于Java代码,很像蟒VM停止在GIL。
在Java世界中这样的虚拟机暂停事件被称为“停停的世界”,在这些点绑定到特定的标准是自由运行的VM其余已停止仅本地代码。
还缺少在Java中的粗锁使得JNI更难写,因为JVM使得更少保证看好其FFI呼吁环境,那CPython的使相当容易的事情之一(虽然不是那么容易,因为使用ctypes的)。
有在这个博客帖子 http://www.grouplens.org/node/ 244 其暗示为什么它是如此容易分配有用于IronPython的或Jython中GIL的原因,那就是CPython的使用引用计数,而另一虚拟机2具有的垃圾收集器。
这是为什么这是确切的机制,所以我不明白,但它听起来像是一个似是而非的理由。
的Python缺乏JIT / AOT和时间帧将其在多线程处理器不存在写入。另外,您可以重新编译朱莉娅郎一切缺乏GIL,并获得在你的Python代码一些速度提升。此外Jython的那种很烂,它比CPython的和Java慢。如果你想坚持到Python考虑使用并行插件,你就不会获得瞬间的速度提升,但你可以用正确的插件做并行编程。