解释性语言如何避免使用全局解释器锁(GIL)?

7 投票
4 回答
1406 浏览
提问于 2025-04-16 12:54

CPython使用了一种叫做全局解释器锁的机制。Linux则去掉了所有关于大内核锁的痕迹。那么,这些锁的替代方案是什么呢?一个系统如何才能充分利用真正的多核或多处理器系统,而不会让所有事情都停滞不前呢?

4 个回答

1

简单来说,就是不要有可以改变的状态,这就像Haskell和其他函数式编程语言一样。因为内存中的东西不需要被修改,所以根本不需要全局锁。

2

GIL是针对每个进程的,所以你可以通过启动多个Python进程来绕过它。multiprocessing模块提供了一个简单易用的接口来实现这一点。

另一种方法是使用C扩展(或者自己写一个),在进行你需要的数据处理时释放GIL。

4

如果Python使用一种更先进的垃圾回收机制,比如IBM的Recycler,那么就不需要GIL(全局解释器锁)了。现在Python使用的是一种比较简单的引用计数方法。为了提高Python的性能,Unladen Swallow正在做一些改进。还有一个更有前景的解决方案是Stackless Python,它使用自己的一种微线程实现,而不是像传统的CPython那样依赖操作系统。

撰写回答