Python Dispatch:让 GIL 成为可选项
指导委员会已经 关于 Python 未来的重大声明.也就是说,他们决定在 CPython 中将全局解释器锁 (GIL) 作为可选项,并最终完全删除 GIL。
这是一个将从根本上改变 Python 的重大决定。
因此,在本篇文章中,我将介绍什么是 GIL、它的优缺点以及未来的发展前景。
GIL
让我以相反的顺序一个词一个词地介绍全球口译员锁,首先是 水闸 然后 口译 最后 全球.
锁是一种机制,一次只允许一个线程运行。因此,当一个线程获得锁时,它就获得了对 Python 解释器的独占访问权。
这里的 "全局 "指的是解释器锁的范围。由于解释器锁是全局的,它保证了在一个进程中,一次只能有一个线程执行 Python 代码。
因此,GIL 是一种防止多个线程同时通过解释器运行的机制。但为什么要这么做呢?
优势
GIL 的主要优点是让事情变得更简单。管理内存更容易,管理线程更容易,创建模块也更容易。
如果没有 GIL,您很快就会遇到多线程问题。如果不为每个线程设置适当的本地锁,最终可能会导致 Python 崩溃或破坏计算机中的其他内存。
如果你不使用多线程,那么 GIL 就会非常有用,因为它能保证一切运行顺畅。
因此,GIL 保持了简单和安全。
那你为什么不想要呢?
劣势
这里需要权衡的是便捷与快速。
通过阻止多线程,GIL 使 CPython 的速度和性能低于其他一些语言(如 C++、Go 和 Rust)。
特别是随着人工智能在过去几个月的蓬勃发展,GIL 在快速高效地执行程序方面越来越成为一个问题。
GIL 的未来
既然指导委员会已经宣布接受了 Python 增强提案 (PEP) 703,由 Sam Gross 编写我们正在进入未知的水域。
无数的扩展程序都是以 GIL 为基础编写的。CPython 的所有标准都依赖于 GIL。每个人在使用 CPython 编写程序时,都会将 GIL 放在程序的中心位置(有意或无意)。
因此,指导委员会在初期选择性地实施 GIL,但从长远来看,他们计划逐步完全取消 GIL。
正如他们在帖子中所说:"我们不希望在有 GIL 和无 GIL 版本(以及扩展模块)之间造成永久性的分裂"。
这绝对会改变 Python,也许最有趣的是,改变的方式还无人知晓。布雷特-坎农 在对核心开发团队的投票中他写道:"让 Python 成为自由线程......有很多未知数。我们不知道有多少代码隐式地依赖于 GIL,或以被 GIL 隐藏的微妙方式导致线程不安全"。
GIL 正在消失--它会带走什么?
更重要的是,新的 CPython 会是什么样子?