一、GIL是什么
在 Python 语言的主流实现 CPython 中,GIL(Global Interpreter Lock,全局解释器锁),在解释器解释执行任何 Python 代码时,都需要先获得这把锁才行,在遇到 I/O 操作时会释放这把锁。如果是纯计算的程序,没有 I/O 操作,解释器会每隔一定次数的操作就释放这把锁,让别的线程有机会执行
(这个次数可以通过sys.setcheckinterval 来调整)。
所以虽然 CPython 的线程库直接封装操作系统的原生线程,但 CPython 进程做为一个整体,同一时间只会有一个获得了 GIL 的线程在跑,其它的线程都处于等待状态等着 GIL 的释放。官网这样解释 GIL:
所以在很多人的概念里CPython就是Python,也就想当然的把GIL归结为Python语言的缺陷。所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL。
那么CPython实现中的GIL又是什么呢?GIL全称Global Interpreter Lock看一下官方给出的解释:
In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)
一个防止多线程并发执行机器码的一个Mutex,是个BUG般存在的全局锁
为什么会有GIL
【

Python的CPython实现中存在全局解释器锁(GIL),主要原因是内存管理不是线程安全的。GIL确保同一时间只有一个线程执行Python字节码,尽管多线程在CPython中并行执行受限,但在多核处理器中,对于I/O密集型任务,GIL仍能提高效率。为了避免GIL的影响,可以使用multiprocess库创建多进程,但会增加数据同步的复杂性。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



