一、GIL的概念
GIL ( Global Interpreter Lock ) 全局解释器锁。
GIL 不是 Python 语言的特性,是CPython中的一个概念。
_Python 解释器也是一个应用程序
二、GIL的作用
线程互斥锁是 Python 代码层面的锁,解决 Python 程序中多线程共享资源的问题
GIL 是__ Python 解释层面的锁,解决解释器中多个线程的竞争资源问题。
三、GIL对程序的影响
由于 GIL 的存在, Python程序中同一时刻有且只有一个线程会执行。
Python 中的多线程_由于 GIL 锁的存在无法利用多核 CPU
Python 中的多线程不适合计算密集型的程序。
GIL 锁在遇到IO等待时,会释放 GIL 锁,可以提高Python_中IO密集型_程序的效率
四、GIL影响的解决办法
如果程序需要大量的计算,利用多核CPU资源,可以使用多进程来解决
五,释放GIL锁的条件
1,有i/o操作,产生时间空闲,cpu闲置
2.ticks计数时间达到100
六、互斥锁和GIL的区别
Gil锁 : 保证同一时刻只有一个线程能使用到cpu
互斥锁 : 多线程时,保证修改共享数据时有序的修改,不会产生数据修改混乱
七、执行过程
1.test1,test2,竞争GIL锁,当test1获得了GIL锁可以使用cpu,同时获得互斥锁开始执行但还没执行到修改给数据
2、test1在修改data数据前发生了i/o操作或者ticks计数满100,test1会释放GIL锁,
3、如果test1因为i/o阻塞释放了GIL,那么test2必然会获得GIL锁,。但是如果是计数满100,那么test1和test2公平竞争
4.如果test2的到了GIL锁,但是test1有互斥锁,所以test2会释放GIL,再次竞争全局锁
5、当test1 获取了gil锁,有因为有互斥锁,当修改数据结束后,会释放和互斥锁lock,test2只有的到了GIL和lock才可以修改数据