美文网首页Python与数据分析
【Python学习笔记】GIL(全局解释器锁)

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

作者: 清梦载星河 | 来源:发表于2020-03-05 13:04 被阅读0次

    一、什么是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,它只是一个解释型语言。

    相关文章

      网友评论

        本文标题:【Python学习笔记】GIL(全局解释器锁)

        本文链接:https://www.haomeiwen.com/subject/mwcxrhtx.html