解释性语言如何避免使用全局解释器锁(GIL)?
4 个回答
1
简单来说,就是不要有可以改变的状态,这就像Haskell和其他函数式编程语言一样。因为内存中的东西不需要被修改,所以根本不需要全局锁。
2
GIL是针对每个进程的,所以你可以通过启动多个Python进程来绕过它。multiprocessing模块提供了一个简单易用的接口来实现这一点。
另一种方法是使用C扩展(或者自己写一个),在进行你需要的数据处理时释放GIL。
4
如果Python使用一种更先进的垃圾回收机制,比如IBM的Recycler,那么就不需要GIL(全局解释器锁)了。现在Python使用的是一种比较简单的引用计数方法。为了提高Python的性能,Unladen Swallow正在做一些改进。还有一个更有前景的解决方案是Stackless Python,它使用自己的一种微线程实现,而不是像传统的CPython那样依赖操作系统。