1. 程式人生 > >53_並發編程-線程-GIL鎖

53_並發編程-線程-GIL鎖

sof 文件 不能 name ESS 並發編程 sed web soft

一、GIL - 全局解釋器鎖   有了GIL的存在,同一時刻同一進程中只有一個線程被執行;由於線程不能使用cpu多核,可以開多個進程實現線程的並發,因為每個進程都會含有一個線程,每個進程都有自己的GIL鎖。      技術分享圖片

① py文件產生了多個線程,到達解釋器 ② 由於GIL鎖問題,所以只能執行一個線程,先調用一個線程,進行編譯器編譯成 .pyc字節碼 ③ 字節碼進入虛擬機形成機器碼 ④ 機器碼由cpu執行 二、性能測試   多進程和多線程對應I/O 純計算效率對比 技術分享圖片
 1
import time 2 from multiprocessing import Process 3 from threading import Thread 4 5 # def func(): 6 # num = 0 7 # for i in range(1,100000000): 8 # num += i 9 10 def func(): 11 time.sleep(2) 12 print(xxxxxxxx) 13 14 if __name__ == __main__: 15 p_s_t = time.time() 16
p_list = [] 17 for i in range(10): 18 p = Process(target=func,) 19 p_list.append(p) 20 p.start() 21 [pp.join() for pp in p_list] 22 p_e_t = time.time() 23 p_dif_t = p_e_t - p_s_t 24 25 t_s_t = time.time() 26 t_list = [] 27 for i in range(10): 28
t = Thread(target=func,) 29 t_list.append(t) 30 t.start() 31 [tt.join() for tt in t_list] 32 t_e_t = time.time() 33 t_dif_t = t_e_t - t_s_t 34 35 print(多進程執行的時間,p_dif_t) 36 print(多線程執行的時間,t_dif_t)
View Code 三、總結   應用:     多線程用於IO密集型,如socket,爬蟲,web     多進程用於計算密集型,如金融分析

53_並發編程-線程-GIL鎖