python GIL

  GIL(全局解释器锁)并不是cpython的特性,它是实现pthon解析器时所引入的一个概念。由于当时的cpu 只存在单核,所以cpython的设计者没有考虑到多核的问题,这也算一个历史的遗留问题。为了让python能够执行多线程,早期的python版本便用了一个简单粗暴的方法,在解释器中添加了一个锁(GIL),既当一个线程运行时,其他线程只能等待。

   GIL的含义是在无论计算机有多少CPU,同一时刻,只能有一个线程在执行。通过下面的图来说明GIL的作用。

  

PS:在做I/O操作时,GIL总是会被释放。对所有面向I/O的程序来说,GIL会在这个I/O调用之前被释放,以允许其他的线程在这个线程等待I/O的时候运行。如果是纯计算的程序,没有I/O操作,解释器会每个100次操作就释放GIL,让别的线程由机会执行,如果某线程并未使用很多I/O操作,它会在自己的时间片内一直占用处理器。也就是说I/O密集型的python程序比计算密集型的程序更能充分利用多线程。

posted @ 2017-08-23 15:50  会开车的好厨师  阅读(110)  评论(0)    收藏  举报