码迷,mamicode.com
首页 > 编程语言 > 详细

python 全局解释锁GIL

时间:2018-07-25 16:22:09      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:指令   线程安全   安全   一个   状态   网络   多核   time   睡眠状态   

Python的全局解释器锁GIL用于保护python解释器,使得任意时刻,只有一个线程在解释器中运行。从而保证线程安全

在多线程环境中,Python 虚拟机按以下方式执行:
1. 设置GIL
2. 切换到一个线程去运行
3. 运行:
    a. 指定数量的字节码指令,或者
    b. 线程主动让出控制(可以调用time.sleep(0))
4. 把线程设置为睡眠状态
5. 解锁GIL
6. 再次重复以上所有步骤
 
由上可知,至少有两种情况python会解锁GIL,做线程切换:一是一但有IO操作时;线程连续执行了一定数量的指令时;当然此处的线程切换不一定就一定会切换到其他线程执行,因为如果当前线程 优先级比较高的话,可能在让出锁以后,又继续获得锁,并优先执行。

由此可以看到,Python多线程是单cpu意义上的多线程,它和多cpu上的多线程有着本质的区别。GIL会影响到那些严重依赖CPU的程序(比如计算型的),即使Python的多线程程序并不能利用多核CPU的优势;

但是如果程序大部分只会设计到I/O,比如网络交互,那么使用多线程就很合适, 因为它们大部分时间都在等待。

python 全局解释锁GIL

标签:指令   线程安全   安全   一个   状态   网络   多核   time   睡眠状态   

原文地址:https://www.cnblogs.com/yoyo008/p/9366088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!