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 扩展使用的宏源兼容。


相关文章