提到GIL,大家都想到这是python处理多线程程序的一个特有的方式。其实然也,GIL并不是python语言特有的特性,而是在实现python解释器(cpython)时引入的一个概念,并且是只有(cpython)这种解释器才会有GIL机制,像(jpython),(pypy),(psyco)这些解释器都是没有GIL机制的。然而cpython是大部分python的默认解释环境,所以潜移默化的使用python的开发者就错误认为这是python语言的一种机制。
那么这个GIL到底是什么呢?为什么有人说它是python的一个缺陷呢?
GIL(global interpreter lock)全局解释器锁。都知道python是解释性语言,那么在运行python程序时,就需要调用python的解释器对python进行编译和解释,那么对于多线程程序而言,几个程序同时进行,那就有可能造成数据不完整或者失真。
举个例子: 例如有一个全局变量用来记录商场货架上苹果的数量,那么现在有很多人同时来买苹果,模拟多线程同时进行,那么都要前往货架区选苹果,然后苹果架上的苹果数量就会减少。那如果没有秩序,所有人都一窝蜂一样跑去抢苹果,你也去取,他也去取,万一货架上的苹果数量不够了咋办。有人说那没有苹果就不买了呗,是的,人在这种情况下选择不买了,但是机器不行啊,它会检测只要有人买苹果,那么记录货架上苹果数量的全局变量就会减少,那这样就有可能造成这个变量变成负数,那这样显然就不符合我们设计这个程序的初衷了,苹果数量