天天看點

53_并發程式設計-線程-GIL鎖

一、GIL - 全局解釋器鎖     有了GIL的存在,同一時刻同一程序中隻有一個線程被執行;由于線程不能使用cpu多核,可以開多個程序實作線程的并發,因為每個程序都會含有一個線程,每個程序都有自己的GIL鎖。      

53_并發程式設計-線程-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     多程序用于計算密集型,如金融分析

轉載于:https://www.cnblogs.com/hq82/p/9876087.html