有人知道 Python 3.1 中全局解释器锁与 C++ 多线程集成的命运吗?
GIL仍然存在于CPython 3.1中;Unladen Swallow项目旨在最终消除它,但离达成目标还有一段路要走,目前正在2.6上工作,并打算最终移植到3.x,以适应2.y版本完成时的当前x。目前,在CPython中使用多个核心的首选方法仍然是使用多进程(而不是线程)(IronPython和Jython也可以,但它们目前不支持Python 3,而且它们也不容易进行C++集成;-)。
Python 3.2的GIL将发生重大变化。请查看Python 3.2的新特性和在邮件列表中引发此变化的线程。
虽然这些变化并不意味着GIL的终结,但它们预示着潜在的巨大性能提升。
过去15年一直在努力从CPython中移除GIL,但可预见的未来它将继续存在。
GIL(全局解释器锁)不会影响不使用Python对象的代码。在NumPy中,我们为计算代码(线性代数调用等)释放GIL,并且底层代码可以自由地使用多线程(实际上,这些通常是不知道Python的第三方库)。
GIL是个好东西。
只需要在C++应用程序进行多线程工作时释放GIL。Python代码将在其他线程中继续运行,不受影响。只有在需要操作Python对象时才获取GIL。
我想GIL(全局解释器锁)永远都会存在。
原因是性能。让所有低级别的访问都线程安全——意味着在每个哈希操作周围放置一个互斥锁等,这是很耗费资源的。请记住,像这样的简单语句
self.foo(self.bar, 3, val)
如果val是全局变量,那么此时可能已经有至少3个哈希表查找,而且如果方法缓存不热(取决于类的继承深度),甚至可能会有更多。
这很昂贵 - 这就是为什么Java放弃了这个想法,并引入了哈希表,它不使用监视器调用来摆脱其“Java速度慢”的商标。