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的多线程一点问题也没有;
如果是计算密集型任务,我们就直接使用多进程就可以了