• python 全局解释锁GIL


    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,比如网络交互,那么使用多线程就很合适, 因为它们大部分时间都在等待。

  • 相关阅读:
    iOS的文字自适应
    指向指针的指针
    NSString的创建
    Foundation-常用结构体
    Foundation summary
    成员变量补充
    Block^
    Protocol
    Category-分类
    李明杰要在广州开课啦
  • 原文地址:https://www.cnblogs.com/yoyo008/p/9366088.html
Copyright © 2020-2023  润新知