Age*_*uid 174 python java multithreading jvm gil
我希望有人可以提供一些见解,了解Java虚拟机的根本不同之处在于它允许它在不需要全局解释器锁(GIL)的情况下很好地实现线程,而Python则需要这样的恶意.
Ale*_*lli 219
Python(该语言)不需要GIL(这就是为什么它可以完美地在JVM [Jython]和.NET [IronPython]上实现,并且这些实现可以自由多线程).CPython(流行的实现)总是使用GIL来简化编码(尤其是垃圾收集机制的编码)以及非线程安全的C编码库的集成(过去常常有大量的; - ).
该空载燕子项目,其它的宏伟目标中,做计划一个GIL -免费的虚拟机为Python -引用该网站,"此外,我们打算移除GIL和修复在Python多线程的状态,我们认为,这是通过实施更复杂的GC系统,例如IBM的Recycler(Bacon等,2001).
Gre*_*yer 49
JVM(至少是热点)确实具有与"GIL"类似的概念,它的锁粒度更加精细,其中大部分来自GC中的更高级的热点.
在CPython中,它是一个很大的锁(可能不是那么真实,但足以说明问题),在JVM中,它根据使用的位置更多地传播不同的概念.
例如,在热点代码中查看vm/runtime/safepoint.hpp,这实际上是一个障碍.一旦处于安全点,整个VM就java代码而停止,就像python VM在GIL停止一样.
在Java世界中,这种VM暂停事件被称为"停止世界",在这些点上,只有绑定到某些标准的本机代码才能自由运行,其余的VM已经停止.
此外,java中缺少粗略锁定使得JNI编写起来要困难得多,因为JVM对其FFI调用环境的保证较少,cpython之所以相当容易(尽管不像使用ctypes那么容易).
小智 6
在这篇博客文章http://www.grouplens.org/node/244中有一篇评论,暗示为什么它很容易为IronPython或Jython免除GIL,这是CPython使用引用计数而其他2个虚拟机都有垃圾收集器.
我为什么会这样做的确切机制,但这听起来似乎是一个合理的理由.
| 归档时间: |
|
| 查看次数: |
16747 次 |
| 最近记录: |