Python——我们能摆脱全局解释器锁吗?


全局解释器锁 (GIL) 是 Python 中的一个互斥锁。让我们首先了解什么是全局解释器锁 (GIL)——

什么是 GIL?

全局解释器锁 (GIL) 是一个互斥锁,它——

  • 保护对 Python 对象的访问;
  • 防止多个线程同时执行 Python 字节码;
  • 防止竞争条件;
  • 确保线程安全。

Python 解释器并非完全线程安全。为了支持多线程 Python 程序,存在一个全局锁,称为全局解释器锁或 GIL。

如果没有这个锁,即使是最简单的操作也可能在多线程程序中导致问题:例如,当两个线程同时增加同一对象的引用计数时,引用计数最终可能只增加一次而不是两次。

GIL 的问题

  • GIL 并非理想,因为它在某些情况下会阻止多线程程序充分利用多处理器系统。

  • GIL 会降低性能。

为什么我们不能移除 GIL?

我们不能移除 GIL,因为:

  • 这会使 Python 的单线程性能比 Python 2 慢。

  • 由于 GIL 的存在甚至早于线程概念的引入,其他特性已经依赖于它解决的问题。这使得在不破坏某些 Python 库的情况下移除 GIL 变得更加困难。

可以移除 GIL 吗?

任何可能的 GIL 替代方案都应该具有以下理想特性:

  • 首先,可能的 GIL 替代方案应该能够实现。

  • 易于维护并长期存在。

  • 它应该加快单线程程序的运行速度。

  • 该方案应该与所有现有 CPython 扩展使用的宏源代码兼容。

更新于:2022年9月20日

558 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.