我希望有人可以提供一些见解什么是根本不同有关Java虚拟机,允许它实施线好不需要一个全球性的解释锁(GIL),同时Python需要这样的邪恶。

有帮助吗?

解决方案

蟒蛇(语言)并不需要一个GIL(这就是为什么它完全可以实现在JVM[Script]。净[IronPython],以及那些实施多线程的自由).CPython(普遍落实)始终使用一个吉尔*为了便于编码(esp。编码垃圾收集机制)和一体化的非线安全的C-编码的图书馆(有一吨的那些围绕;-).

空载燕子 的项目,除其他雄心勃勃的目标,不 计划 GIL-免费的虚拟机Python--引用该网站,"此外,我们打算删除吉尔和修复状态的多元素。我们相信这是可能的,通过实施一个更复杂的GC系统,像IBM的回收(肉等人,2001年)。"

其他提示

在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具有的垃圾收集器。

这是为什么这是确切的机制,所以我不明白,但它听起来像是一个似是而非的理由。

在此 链接 它们具有以下解释:

..."部分的解释不线程安全,虽然主要是因为使他们的所有线程安全的大规模锁使用情况将缓慢的单程极为(来源).这似乎是相关的CPython垃圾收集器使用的参考计数(JVM和CLR别,因此不需要锁/释放的一个基准计算每一时间)。但是,即使有人认为可以接受的解决方案和实现它的第三方图书馆仍将具有相同的问题。"

的Python缺乏JIT / AOT和时间帧将其在多线程处理器不存在写入。另外,您可以重新编译朱莉娅郎一切缺乏GIL,并获得在你的Python代码一些速度提升。此外Jython的那种很烂,它比CPython的和Java慢。如果你想坚持到Python考虑使用并行插件,你就不会获得瞬间的速度提升,但你可以用正确的插件做并行编程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top