为什么你可以在不需要GIL但是Python(CPython)需要GIL的情况下运行Jython和IronPython?
答案 0 :(得分:8)
解释器的某些部分不是线程安全的,但主要是因为通过大量锁定使用使它们全部线程安全会使单线程非常慢(source)。这似乎与使用引用计数的CPython垃圾收集器有关(JVM和CLR没有,因此不需要每次都锁定/释放引用计数)。但即使有人想到一个可接受的解决方案并实施它,第三方库仍然会遇到同样的问题。
请注意,用C语言编写的扩展实际上可以删除GIL:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock
答案 1 :(得分:2)
我的猜测,因为构建CPython的C库不是线程安全的。而Jython和IronPython分别是针对Java和.Net构建的。