zoukankan      html  css  js  c++  java
  • day35 GIL介绍 cpython解释器的垃圾回收机制 GIL与自定义互斥锁 多进程vs多线程 线程queue 进程池与线程池

    1、什么是GIL(这是Cpython解释器)

    GIL本质就是一把互斥锁,那既然是互斥锁,原理都一样,都是让多个并发线程同一时间只能有一个执行。

    即:有了GIL的存在,同一进程内多个线程同一时刻只能有一个在运行,意味着在Cpython中一个进程下的多个

    线程无法实现并行=====>意味着无法利用多核优势但不影响并发的实现

    2、为何要有GIL

    3、如何用

    from threading import Thread,Lock
    import time
    
    mutex=Lock()   #生成锁赋给变量
    n=100
    
    def task():
        global n  #声明n就表示n为100
        mutex.acquire()
        temp=n
        time.sleep(0.1)
        n=temp-1
        mutex.release()
    
    if __name__ == '__main__':
        t_l=[]
        start_time=time.time()
        for i in range(3):
            t=Thread(target=task)
            t_l.append(t)
            t.start()
    
        for t in t_l:#让他变成串行
            t.join()
    
        stop_time=time.time()
        print(n)
        print(stop_time-start_time)
    

      

  • 相关阅读:
    [HNOI2008] Cards
    loj #136
    a problem
    dp * 3
    STL
    套题1
    luogu 4211
    loj #2319
    loj #2316
    luogu 1144
  • 原文地址:https://www.cnblogs.com/wangmiaolu/p/9321430.html
Copyright © 2011-2022 走看看