一、
-
GIL的说明
首先说明,GIL(global interpreter lock),中文称全局解释器锁,并不是Python的特性,它是CPython的产物,像JPython和IronPython因为其语言的特性,所以不需要GIL的帮助。 -
GIL的工作原理及导致的问题
为了解决多线程之间数据完整性和状态同步的问题,最简单方法自然就是加锁,这是GIL的由来。
在一个古老的单核CPU上调度多个线程任务,大家相互共享一个全局锁,谁在CPU执行,谁就占有这把锁,直到这个线程因为IO操作或者Timer Tick到期让出CPU,没有在执行的线程就安静的等待着这把锁。
然而在应用程序和操作系统逐渐由多任务单核心转向多任务多核心的今天,除python多线程在执行多阻塞高延迟IO时可以提升程序效率外,其他情况GIL并不能对效率有所提升。
例如:
(1)线程1、2、3轮流执行,每一个线程在执行的时候,都会锁住GIL,以阻止别的线程执行;同样的,每一个线程在因为IO操作或者Timer Tick到期后,会释放GIL,以允许别的线程开始利用资源。