【Python学习笔记】GIL(全局解释器锁)

一、什么是GIL

GIL,是最流行的 Python 解释器 CPython 中的一个技术术语。它的意思是全局解释器锁,本质上是类似操作系统的 Mutex。每一个 Python 线程,在 CPython 解释器中执行时,都会先锁住自己的线程,阻止别的线程执行。CPython会轮流执行线程,模拟真正并行的线程,产生“伪并行”。

为什么要有GIL

  1. 避免内存管理的复杂风险;
  2. 因为CPython使用大量的C语言库,而大部分C语言库都不是线程安全的。

二、GIL的工作流程

假设有两个线程 thread 1 和 thread 2 。thread 1 先执行,遇到需要等候IO操作的时候,thread 1 会释放GIL;thread 2 开始执行,thread 2开始执行时会锁住GIL,以阻止其他线程执行。这就是一个简单的GIL工作流程。

CPython存在一种机制,名叫“check_interval”,这个机制会每隔一段时间轮询检查GIL的锁住情况,并强制当前线程释放GIL。这样能够保证GIL不会被某个线程独占。

三、如何绕过 GIL

古话说,“射人先射马,擒贼先擒王。”GIL 应 CPython而生,所以只要用户的程序没有使用CPython就绕过GIL了。如今有一些Python库是直接用C语言来实现的,比如 Numpy。借助好这些第三方库,就能绕过GIL实现更好的性能。

大部分情况下GIL是不需要过多考虑的,如果对性能真的有超级严苛的要求,那还请你放过Python,它只是一个解释型语言。

推荐阅读更多精彩内容