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 扩展使用的宏源代码兼容。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP