Python中的GIL锁

2019-10-28  本文已影响0人  Gi_So

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的多线程一点问题也没有;

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

上一篇下一篇

猜你喜欢

热点阅读