20191031:GIL全局解释锁
总结关于GIL全局解释锁的个人理解
GIl全局解释锁,本身不是Python语言的特性,而是Python语言底层的c Python解释器的一个特性。在其他解释器中是没有这个概念的,比如说jpython和pypy.
什么是解释器呢?就是说我们本身写的Python语言是可视化语言的计算机是不能够理解并执行的,计算机本身它是只能够识别二进制信号的。就是他这种二进制信号是通过模拟电路的通电和断电来模拟01来进行。
基于上述概念,那么每一个python文件想要被执行,都需要解释器来进行Python代码的解释,也就是编译的过程.
Python在内存管理中依赖于gc,Gc本身也是需要一个线程去执行的,也就是说比如说我要回收垃圾嘛,那我也要有一个线程去找系统里面的垃圾。那基于这样的一个场景呢,也就是说一个python代码在内存中执行同时内存中至少会有2个以上线程在运行!那么就有一种场景如下:
在不加锁的情况下,当垃圾回收机制线程发现某一个变量如x的引用次数为0,垃圾回收线程准备回收这个变量的内存空间,这个时候Cpu突然切换到了另外一个线程,比如说在另外一个线程里面此时又用到了x的地址引用,然后时间片到了以后,CPU再次切换到垃圾回收线程,然后垃圾回收线程继续回收这个x的内存空间,然后CPU再次切换到了引用x的这个线程的时候,发现x已经被回收了,就会导致资源的混乱。因此我们需要一个全局解释锁在里面把这个分配内存和回收内存这个操作加锁,你加了锁以后垃圾回收线程去回收的时候就发现啊,这个被锁住了回收不了。