美文网首页
11-1 多线程的GIL

11-1 多线程的GIL

作者: 正在努力ing | 来源:发表于2018-08-26 15:38 被阅读0次
    # GIL: global interpreter lock (基于cpython写的)
    
    # gil使得Python在多核cpu上也只能运行一个进程;所谓多核多个进程再跑是一个假象,他是来回切换的,
    
    # 问题:GIL 在同一个进程直到结束才会释放吗?
    
    total = 0
    def add():
        global total
        for i in range(1000000):
            total += 1
    
    
    def dec():
        global total
        for i in range(1000000):
            total -= 1
    
    import threading
    
    
    th1 = threading.Thread(target=add)
    th2 = threading.Thread(target=dec)
    
    th1.start()
    th2.start()
    
    th1.join()
    th2.join()
    print(total)
    
    >>> 
    382425
    351753
    

    问题:GIL 在同一个进程直到结束才会释放吗?

    每次运行出来的结果是不一样的,证明GIL在进程运行过程中会释放,不会等到进程结束的时候才释放

    结论 :

    GIL在IO操作时会主动释放 ;
    GIL会根据执行的字节码行数以及时间片释放GIL

    相关文章

      网友评论

          本文标题:11-1 多线程的GIL

          本文链接:https://www.haomeiwen.com/subject/mxyoiftx.html