一、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 多程序用于計算密集型,如金融分析
轉載于:https://www.cnblogs.com/hq82/p/9876087.html