【Python学习笔记】GIL(全局解释器锁)
2020-03-05 本文已影响0人
清梦载星河
一、什么是GIL
GIL,是最流行的 Python 解释器 CPython 中的一个技术术语。它的意思是全局解释器锁,本质上是类似操作系统的 Mutex。每一个 Python 线程,在 CPython 解释器中执行时,都会先锁住自己的线程,阻止别的线程执行。CPython会轮流执行线程,模拟真正并行的线程,产生“伪并行”。
为什么要有GIL
- 避免内存管理的复杂风险;
- 因为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,它只是一个解释型语言。