1、说明
它是一个全球解释器锁。每个线程在执行时都需要获得GIL,以确保只有一个线程可以在同一时间执行代码,即只有一个线程在同一时间使用CPU,也就是说,多线程不是真正意义上的同时执行。
2、产生原因
(1)Guido van Rossum(吉多·范罗苏姆)创建python时只考虑单核cpu。
(2)解决多线程之间数据完整性和状态同步最简单的方法就是加锁。 所以有了GIL这个超级大锁。
(3)cpython解析只允许GIL全局解析器锁运行程序。
(4)确保cpu只能在同一时间使用一个线程。
(5)以前写cpython解析器的时候考虑cpu情况。
(6)由于大量程序开发人员接受了这种机制,现在代码越来越多,通过c代码解决这个问题并不容易。
3、释放gil锁的时机
(1)遇到像 i/o操作这个 会有空闲时间 cpu闲置的情况会释放Gil
(2)会有一个特殊的ticks来计数 一旦ticks值达到1000 此时释放Gil锁锁 Gil锁在线程之间竞争(说明:
(3)ticks这个值可以设置来延长或缩短获得gil锁的线程使用cpu的时间)
以上是python 在了解了gil的基本用法后,大家都可以找一些gil的例子来练习。更多Python学习指导:python基础教程
(推荐操作系统:windows7系统Python 3.9.1,DELL G3电脑。)