1、说明
GIL规定一个Python解释程序只能同时由一个线程控制。
在CPU限制类型和多线程代码中,GIL是一个性能瓶颈。
GIL使Python多线程成为伪并行多线程。
仅CPython解释器上存在GIL。
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计数达到100个ticks(对应大约1000个字节码)而放弃GIL,那么此时线程1和线程2将公平竞争。
(4) 但要命的是,在Python 2.x中,线程1不会动态调整自己的优先级,所以下一次大概率会选择线程1执行。在许多这样的选举周期中,线程 2 只能静静地看着线程 1 用 GIL 在 CPU 1 上愉快地执行。
(5)极端情况下,比如线程1使用while True在CPU1上执行,真的是“一核难,八核围观”。
以上就是python中GIL的原理
介绍,希望能对大家有所帮助。
更多Python学习指路:
本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python如何导入pandas09/10
- ♥ 我应该使用什么软件来运行python?09/11
- ♥ python如何提取文本中的文本?10/11
- ♥ python类是否声明变量类型01/02
- ♥ Ubuntu如何切换python版本?01/06
- ♥ python3.6自带pip吗?11/29
内容反馈