GIL全局解释器锁GIL
什么是全局解释器锁GIL?
在 CPython 解释器中执行的每一个 Python 线程,都会先锁住GIL,以阻止别的线程执行。
GIL限制了同一时刻只能有一个线程使用cpu。这样导致了无法利用多核(cpu)。
当然,CPython 不可能容忍一个线程一直独占解释器,它会轮流执行 Python 线程。这样一来,用户看到的就是“伪”并行,即 Python 线程在交替执行,来模拟真正并行的线程。
为什么还需要 GIL 呢?
其实,这和 CPython 的底层内存管理有关。
CPython 使用引用计数来管理内容,所有 Python 脚本中创建的实例(即对象),都会配备一个引用计数,来记录有多少个指针来指向它。当实例的引用计数的值为 0 时,会自动释放其所占的内存。