美文网首页
Python中的GIL锁

Python中的GIL锁

作者: Gi_So | 来源:发表于2019-10-28 09:28 被阅读0次

    1、什么是GIL锁:

            GIL的全称是Global Interpreter Lock(全局解释器锁),GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。保护不同的数据的安全,就应该加不同的锁。

    2、那么GIL带来了什么影响呢?

           由于GIL锁的存在,Python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,Python的多线程显的很鸡肋的原因。无论机器上有都少个CPU,同一时间,只使用了一个CPU。

    3、怎么解决由于GIL锁带来的问题?

           有了GIL的存在,python有这两个特点:

      ①、进程可以利用多核,但是开销大。

      ②、多线程开销小,却无法利用多核优势。

      也就是说Python中的多线程是假的多线程,Python解释器虽然可以开启多个线程,但同一时间只有一个线程能在解释器中执行,而做到这一点正是由于GIL锁的存在,它的存在使得CPU的资源同一时间只会给一个线程使用,而由于开启线程的开销小,所以多线程才能有一片用武之地。

      那python的多线程到底有没有用呢?,我们需要看任务是I/O密集型,还是计算密集型:

      如果是I/O密集型任务,有再多核也没用,即能开再多进程也没用,所以我们利用python的多线程一点问题也没有;

      如果是计算密集型任务,我们就直接使用多进程就可以了

    相关文章

      网友评论

          本文标题:Python中的GIL锁

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