深挖 GIL锁
重述 GIL 锁机制 我们知道GIL锁,它是用来保证线程安全的。 比如说,有一条代码 是 x = 10 的赋值语句,当你产生了 10 这个数值还没有进行赋值给x的时候,cpu发生了调度切换了,有可能切换到了 垃圾回收线程上,这个时候的垃圾回收线程就会发现有一个引用计数为10 的内存空间,于是就把他给释放掉了,这就导致了这条赋值语句的失败。也就造成了线程不安全的情况。 所以为了解决这个问题,就有了GIL全局解释器锁。 大白话来讲GIL锁,就是一个进程开启了,这个进程一共有3个线程,这三个线程会去抢GIL锁,只有抢到了GIL锁,解释器进程才会去执行这个线程的代码,抢到了GIL锁以后,等待cpu调度切换到了这个进程,这个进程中的线程开始执行,cpu不停地在这三个线程切换,只有其中拿到了GIL锁的线程才能被执行,其他的两个线程,就算拿到了cpu的执行权,也没有被执行。 问题 现在就有个问题,那这个拿到了GIL锁的线程什么时候才会释放GIL锁? 答案 当遇到io等待的时候,就会释放这个GIL锁。 问题二 什么是io,其实不止是增删读写文件,赋值操作也是io,关于文件的操作是磁盘io,赋值操作是内存io,因为它涉及到内存的申请了。那么他不就是在赋值的时候就释放了GIL锁了吗? 答案 内存io不会造成io等待。所以不会释放GIL锁。 总述GIL锁 1.释放GIL锁的目标,是为了释放CPU