python GIL :全局解釋器
阿新 • • 發佈:2018-07-02
提高工作效率 解釋 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 *= iprint("累乘的結果是:",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 :全局解釋器