Python 的 GIL 消灭了吗?

导读:历史上的GIL特性是为帮助开发者少走弯路的,如今它却成了性能的瓶颈。在最新的Python中,有意想把它拿下,但是又谈何容易,包括遗留代码,与其它新特性的权衡。

我们回到2003的年初,中央处理器芯片厂商英特尔推出了新款Pentium 4“HT”处理器。该处理器的主频为 3 GHz,并具有当时先进的“超线程”技术。

在接下来的几年里,英特尔和 AMD 通过提高总线速度、二级缓存大小和减小芯片尺寸,以最大限度地减少延迟,来实现最佳台式计算机的性能。

3Ghz HT 于 2004 年被主频高达 4 GHz 的“Prescott”型号 580 取代。似乎获得更好性能的道路是更高的时钟速度,但 CPU 却受到高功耗与地球变暖的热量输出困扰。

现在你的台式机中还有 4Ghz CPU 吗?估计不太可能了,因为提高性能的方法是更高的总线速度和多核心。Intel Core 2 于 2006 年取代了 Pentium 4,但时钟速度要低得多。

除了消费级多核 CPU 的发布之外,2006 年还发生了一件事情:Python 2.5 发布!它捆绑了开发者熟悉并喜爱的 with 语句的测试版。

当使用 Intel 的 Core 2 或 AMD 的 Athlon X2 时,当时的Python 2.5 有一个主要限制,那就是GIL。

Python 的 GIL 消灭了吗?-1

什么是 GIL?

GIL(即全局解释器锁)是 Python 解释器中的布尔值,受互斥体保护。

CPython 解释器中的核心字节码评估循环使用锁,来设置当前正在执行语句的线程。

CPython 支持单个解释器内的多个线程,但线程必须请求访问 GIL 才能执行操作码(低级操作)。

反过来,这意味着 Python 开发人员可以使用异步代码、多线程代码,而不必担心获取任何变量的锁或进程因死锁而崩溃。

GIL 使 Python 中的多线程编程变得简单。GIL 还意味着虽然 CPython 可以是多线程的,但在任何给定时间只能执行 1 个线程。这意味着你的四核 CPU 正在执行此操作 —(希望能排除蓝屏)

GIL 的当前版本是在 2009 年编写,用于支持异步功能,即使在多次尝试删除它或减少对它的要求之后,它仍然相对没有受到影响。

任何删除 GIL 的提案的要求是它不应降低任何单线程代码的性能。在 2003 年启用过超线程的开发者都会明白为什么它很重要。