GIL与线程互斥锁

1、GIL与线程互斥锁的区别

(1)线程互斥锁是python代码层面的锁,解决了python程序中多线程共享资源的问题

(2)GIL是python解释器层面的锁,只在CPython解释器中存在,解决了解释器中多线程竞争资源的问题

2、python的线程虽然是真正的线程,但解释器可执行代码时,有一个GIL锁,任何python线程执行前,必须先获取GIL锁,然后每执行一定字节码,解释器就会释放GIL锁,让其他线程有机会执行。

3、GIL对程序的影响

(1)python中同一时刻有且只有一个线程执行

(2)python中的多线程,由于GIL的存在,无法利用多核CPU

(3)python中多线程不适合运行计算密集型程序,计算密集型的任务需要大量计算,消耗cpu资源,如果程序需要进行大量计算,利用多核CPU,可以使用多进程代替多线程

4、如何改善GIL?

(1)更换更高版本的解释器,从3.2开始,对解释器进行了优化

(2)更换解释器,因为GIL仅在CPython中存在

(3)python为了解决程序使用多核问题,使用多进程替代了多线程

猜你喜欢

转载自blog.csdn.net/qq_35169931/article/details/85112340
今日推荐