Python 3.1中的GIL
有没有人知道在Python 3.1中,全局解释器锁(Global Interpreter Lock,简称GIL)对C++多线程整合的影响?
7 个回答
9
全局解释器锁(GIL)不会影响那些不使用Python对象的代码。在Numpy中,我们会在进行计算时释放GIL(比如线性代数的计算等),这样底层的代码就可以自由地使用多线程(实际上,这些通常是一些第三方库,它们对Python并不了解)。
17
在Python 3.2中,GIL(全局解释器锁)将会有重要的变化。你可以看看Python 3.2的新特性,以及在邮件列表中引发讨论的帖子。
虽然这些变化并不意味着GIL会消失,但它们可能会带来巨大的性能提升。
更新
- Antoine Pitrou提到,3.2版本的新GIL带来的整体性能提升并不明显,主要是集中在解决某些特殊情况下的竞争问题。
- David Beazley进行了一项值得称赞的努力,试图实现一个调度器,以显著提高CPU和IO密集型线程混合时的性能,但不幸的是这个提议被否决了。
- Unladen Swallow项目曾被提议合并到Python 3.3中,但由于该项目没有取得成果,这个提议已经撤回。现在PyPy是更受欢迎的项目,目前正在请求资金来增加对Python3k的支持。目前PyPy成为默认选项的可能性非常小。
过去15年来,大家一直在努力想要从CPython中去掉GIL,但在可预见的未来,它仍然会存在。
25
在CPython 3.1中,GIL(全局解释器锁)依然存在。Unladen Swallow项目的目标之一是提升性能,最终希望能去掉这个锁,但距离这个目标还有一段路要走。这个项目目前主要在处理Python 2.6,未来打算把成果移植到3.x版本,具体的3.x版本会是什么时候还不确定。现在,在CPython中,如果想要使用多个处理器核心,推荐使用多进程(multiprocessing),而不是线程(threading)。虽然IronPython和Jython也可以用,但它们目前不支持Python 3,而且与C++的结合也不是很方便;-)