【发布时间】:2011-03-26 15:25:19
【问题描述】:
为什么无需 GIL 即可运行 Jython 和 IronPython,而 Python (CPython) 需要 GIL?
【问题讨论】:
-
@Alex Martelli,该帖子确实问了同样的问题,但没有答案解释为什么 cpython 需要 GIL。
标签: python multithreading ironpython jython gil
为什么无需 GIL 即可运行 Jython 和 IronPython,而 Python (CPython) 需要 GIL?
【问题讨论】:
标签: python multithreading ironpython jython gil
解释器的某些部分不是线程安全的,尽管主要是因为通过大量使用锁使它们全部成为线程安全的会极大地减慢单线程(source)。这似乎与使用引用计数的 CPython 垃圾收集器有关(JVM 和 CLR 没有,因此不需要每次都锁定/释放引用计数)。但即使有人想到了一个可接受的解决方案并实施了它,第三方库仍然会遇到同样的问题。
请注意,用 C 编写的扩展实际上可以摆脱 GIL:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock
【讨论】:
我的猜测,因为 CPython 所基于的 C 库不是线程安全的。而 Jython 和 IronPython 分别针对 Java 和 .Net 构建。
【讨论】: