Python需要一个GIL.但Jython和IronPython没有.为什么?

Jam*_*esD 5 python multithreading ironpython jython gil

为什么你可以在不需要GIL但是Python(CPython)需要GIL的情况下运行Jython和IronPython?

小智 9

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

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


Ala*_*lan 3

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