Python - 我们能不能摆脱全局解释器锁?
pythonprogrammingserver side programming更新于 2023/11/29 4:03:00
全局解释器锁是 Python 中的互斥锁。让我们首先了解什么是全局解释器锁 (GIL) −
什么是 GIL?
全局解释器锁或 GIL 是一个互斥锁,它 −
- 保护对 Python 对象的访问,
- 防止多个线程同时执行 Python 字节码。
- 防止竞争条件。
- 确保线程安全。
Python 解释器不是完全线程安全的。为了支持多线程 Python 程序,有一个全局锁,称为全局解释器锁或 GIL。
如果没有锁,即使是最简单的操作也可能导致多线程程序出现问题:例如,当两个线程同时增加同一对象的引用计数时,引用计数最终可能只增加一次而不是两次。
GIL 的问题
GIL 并不理想,因为它会阻止多线程程序在某些情况下充分利用多处理器系统。
GIL 会降低性能。
为什么我们不能删除 GIL?
我们不能删除 GIL,因为
这会使 Python 在单线程中比 Python 2 慢性能。
由于 GIL 甚至在引入线程概念之前就已存在,因此其他功能已逐渐依赖于它所解决的问题。这使得在不破坏某些 Python 库的情况下删除 GIL 变得更加困难。
可以删除 GIL 吗?
对于任何可能的 GIL 替换,以下属性都是可取的 -
首先,可能的 GIL 替换应该是可以实现的。
可以长期维护和生存。
它应该加快单线程程序的速度。
该提案应与所有现有 CPython 扩展使用的宏源兼容。