GIL定义
GIL,the Global Interpreter Lock,直译为“全局解释锁”
GIL存在原因
CPython在执行多线程的时候并不是线程安全的,为了线程间数据的一致性和状态同步的完整性。
GIL不是Python特性
GIL是Python解释器(Cpython)时引入的概念,在JPython、PyPy中没有GIL。GIL并不是Python的语言缺陷。
GIL的弊端
-
GIL对计算密集型的程序会产生影响。因为计算密集型的程序,需要占用系统资源。GIL的存在,相当于始终在进行单线程运算,这样自然就慢了。
-
IO密集型影响不大的原因在于,IO,input/output,这两个词就表明程序的瓶颈在于输入所耗费的时间,线程大部分时间在等待,所以它们是多个一起等(多线程)还是单个等(单线程)无所谓的。
这就好比,你在公交站等公交时,你们排队等公交(单线程)还是沿着马路一字排开等(多线程)是无所谓的。公交车(即input,即输入的资源)没来,哪种方式都是瞎折腾。
如何解决
1、重写python编译器(官方cpython)如使用:PyPy解释器
2、调用C语言的链接库