1. 程式人生 > >python GIL :全局解釋器

python GIL :全局解釋器

提高工作效率 解釋 record bsp cpu def join() code odin

cpython 解釋器中存在一個GIL(全局解釋器鎖),無論多少個線程、多少顆cpu

他的作用就是保證同一時刻只有一個線程可以執行代碼,因此造成了我們使用多線程的時候無法實現並行。

因為有GIL的存在、所以同一時刻只能有一個線程被CPU執行

任務:IO 密集型:可以采用多線程(多進程+協成)

計算密集型:python不適用

(1)IO 密集型、CPU會是實現自動切換 提高工作效率

def ListenMusic(name):
    print("beging listening to %s,%s" %(name,time.ctime()))
    time.sleep(
5) print("end listening %s" % time.ctime()) def Recordlog(name): print("beging recoding to %s,%s" %(name,time.ctime())) time.sleep(5) print("end recoding %s" % time.ctime()) if __name__ == __main__: threads=[] t1=threading.Thread(target=ListenMusic,args=("鳳凰傳奇",)) t2=threading.Thread(target=Recordlog,args=("
python多線程",)) threads.append(t1) threads.append(t2) for t in threads: t.start()

(2) 計算密集型 cpu 一直處於工作狀態、沒有io流的切換、不適用多進程

import threading,time
def add():
    s=0
    for i in range(100000990):
        s +=i
    print("累加的結果是:",s)
def mul():
    s1=1
    for i in range(1,10000):
        s1 *= i
    
print("累乘的結果是:",s1) if __name__ == __main__: start= time.time() L = [] t1=threading.Thread(target=add) t2=threading.Thread(target=mul) L.append(t1) L.append(t2) for t in L: t.start() for t in L: t.join() print("總共花費時間",time.time()-start)

python GIL :全局解釋器