• Python GIL


    1. Python 中一个线程对应于C语言中的一个线程
    2. GIL 使得同一时刻只有一个线程在一个CPU内核上执行字节码。我们只要运行一个Python进程,不管里面有多少个线程,都只能运行在一个CPU内核上,而像JAVA,C等可以将多个线程映射到多个CPU内核上。无法将多个线程映射到多个CPU上,这样就无法体现CPU多核的优势,并发就非常受限

    一个时刻只有一个线程运行在CPU上,那编写多线程是不是不用考虑线程间同步?

    看这个例子:

    import threading
    
    total = 0
    
    def add():
        global total
        for i in range(1000000):
            total += 1
    
    def desc():
        global total
        for i in range(1000000):
            total -=1
    
    
    thread1 = threading.Thread(target=add)
    thread2 = threading.Thread(target=desc)
    thread1.start()
    thread2.start()
    
    thread1.join()
    thread2.join()
    
    print(total)
    

    total 的值,每次运行都不一样,说明GIL在某些时候会释放

    GIL在什么时候会释放?

    1. GIL 会根据执行的字节码行数以及时间片释放GIL
    2. 遇到IO操作会释放
     
     
  • 相关阅读:
    Application和Page详解
    Session解析
    CSS设置技巧
    CSS布局模型
    CSS盒模型
    JAVA -Xms -Xmx -XX:PermSize -XX:MaxPermSize 区别
    设计模式——单例模式
    设计模式——工厂模式
    Go语言学习
    每周一个设计模式
  • 原文地址:https://www.cnblogs.com/jeff-ideas/p/10540350.html
Copyright © 2020-2023  润新知