什么是 Python 全局解释器锁 (GIL)
在本文中,我们将了解什么是 Python 全局解释器锁 (GIL)。
这是一种锁或障碍,阻止 Python 解释器同时对多个线程可用。GIL 被确定为 Python 3.x 中的故障/问题。或更早的版本,因为它不允许在多线程架构中使用多线程。
为什么要引入它?
Python 支持自动垃圾收集的概念。一旦对象的引用计数达到零,内存就会被清理并释放以供使用。
>>> import sys
>>> var = {}
>>> print(sys.getrefcount(ar))
>>> 2
>>> v=var
>>> print(sys.getrefcount(v))
>>> 3
在这种情况下,如果引用计数开始同时减少和增加,自动收集器将无法正常工作,因此内存泄漏的可能性会增加。
为了降低这种风险,python 中引入了 GIL。添加全局锁被认为比向每个变量添加锁更好,因为每个变量都会导致一系列锁导致死锁。

为什么 GIL 仍然存在于 Python 中
GIL 需要改进,以便我们能够以更好的方式处理它。因此,我们不是要删除 GIL,而是要改进 GIL 的概念。由于 python 纯粹与 c 和 cpython 的基础相关,因此我们不能直接删除 Gil。尽管有各种方法可以解决 GIL 解决的问题,但这些问题很难实现,并且会降低系统的处理和运行时间。
例如,
假设进程 P1 正在运行,有线程 t1 和 t2。Python 线程本质上是本机的,由底层操作系统调度。
t1 正在运行(运行阶段)(获取 GIL)→ t1 等待 I/O(输入/输出)(释放 GIL)→ t2 正在运行(运行阶段)(获取 GIL,此时 t1 也已准备好运行,但 GIL 已被 t2 获取)
因此,这里的 GIL 成为主要限制。因此,如果我们想编写一个执行大量 CPU 绑定操作的多线程 Python 应用程序/模块,就不可能获得所需的结果。
因为,在 Python 中真正的多线程是不可能的,因为即使有多核 CPU 可用,该进程实际上也只会一次使用一个 CPU。
但是,在大多数 Python 应用程序(Web 应用程序、基于 Django 的服务器等)中,这不再是一个问题,因为这些应用程序本质上是 I/O 绑定的。
作为 Python 程序员,我们永远不必处理获取和释放 GIL,直到我们编写可在 Python 中执行的 C/C++ 模块/脚本
结论
在本文中,我们了解了 Python 全局解释器锁、它的重要性以及为什么不能直接从 Python 中删除。
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

