1、说明
GIL规定,Python解释程序只能同时由一个线程控制。
GIL是CPU限制类型和多线程代码的性能瓶颈。
GIL使Python多线程成为伪并行多线程。
GIL存在于CPython解释器中。
2、原理
(1)线程1、2、3轮流执行,每个线程在执行时都会锁定GIL,以防止其他线程执行;
同样,为了允许其他线程开始使用资源,GIL将在每个线程执行一段后释放。
(2)由于古老的GIL机制,如果线程2需要在CPU2上执行,则需要等待在CPU1上执行的线程1释放GIL(记住:GIL是全局)
(3)如果线程1是因为 i/o 阻塞让出的GIL,那么线程2必须得到GIL。但如果线程1是因为timer ticks计数满100ticks(大概对应1000个bytecodes)让GIL,那么此时线程1和线程2公平竞争。
(4)但要命的是,在Python 2.x, 线程1不会动态地调整自己的优先级,所以很有可能下次选择或线程1。在许多这样的选举周期中,线程2只能静静地看着线程1,在CPU中使用GIL 一上欢快执行。
(5)在极端情况下,例如线程1使用while True在CPU1上执行,那真是“一核难,八核围观”。
以上是python中GIL的原理介绍,希望对大家有所帮助。更多Python学习指导:python基础教程
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。