2010-08-07 99 views
4

为什么您可以在不需要GIL的情况下运行Jython和IronPython,但是Python(CPython)需要GIL?Python需要一个GIL。但Jython和IronPython没有。为什么?

+2

见http://stackoverflow.com/questions/991904/why-is-there-no-gil-in-the- java-virtual-machine-why-does-python-need-one-so-bad/991917#991917。 – 2010-08-07 05:05:35

+1

@Alex Martelli,那篇文章确实提出了同样的问题,但没有答案解释为什么cpython需要一个GIL。 – JamesD 2010-08-07 05:12:33

回答

2

我的猜测是,因为CPython构建的C库不是线程安全的。 Jython和IronPython分别针对Java和.Net构建。

8

解释器的部分内容不是线程安全的,但主要是因为通过大量锁定使用它们全部线程安全会使单线程极其缓慢(source)。这似乎与使用引用计数的CPython垃圾回收器相关(JVM和CLR不会,因此不需要每次锁定/释放引用计数)。但即使有人想到可接受的解决方案并实施它,第三方库仍然会有同样的问题。

需要注意的是C语言编写的扩展实际上可以摆脱GIL的:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock

相关问题