Python需要GIL,但Jython和IronPython不需要。为什么?

6 投票
2 回答
3084 浏览
提问于 2025-04-16 02:27

为什么你可以运行Jython和IronPython而不需要全局解释器锁(GIL),但Python(CPython)却需要这个锁呢?

2 个回答

3

我猜是因为CPython所依赖的C语言库不是线程安全的。而Jython和IronPython则是分别基于Java和.Net构建的。

11

解释器的某些部分并不是线程安全的,主要是因为如果为了让它们都线程安全而使用大量的锁,会让单线程的运行变得非常慢。这和CPython的垃圾回收机制有关,它使用的是引用计数(而JVM和CLR则不是,所以它们不需要每次都锁定或释放引用计数)。不过,即使有人想出了一个可行的解决方案并实现了它,第三方库仍然会面临同样的问题。

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

撰写回答