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扩展使用的宏源代码兼容。
极客笔记