多執行緒和多行程使用對比
1、多執行緒和多行程使用對比例子
需求:寫一個計算密集型任務,寫一個IO密集型任務,分別使用多執行緒和多行程測驗兩個任務執行的消耗時間
# 計算密集型任務 def task1(): # 從0開始計算10000000次 +1操作 i = 0 for line in range(10000000): i += 1 # IO密集型任務 def task2(): time.sleep(3) if __name__ == '__main__': # 使用多執行緒,測驗計算密集型任務 start_time = time.time() list1 = [] for i in range(6): # 創建6個子執行緒 p = Thread(target=task1) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多執行緒-計算密集型】任務執行時間為 {end_time - start_time}") # 使用多執行緒,測驗IO密集型 start_time = time.time() list1 = [] for i in range(6): # 創建6個子執行緒 p = Thread(target=task2) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多執行緒-IO密集型】任務執行時間為 {end_time - start_time}") # 使用多行程,測驗計算密集型 start_time = time.time() list1 = [] for i in range(6): # 創建6個子行程 p = Process(target=task1) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多行程-計算密集型】任務執行時間為 {end_time - start_time}") # 使用多行程,測驗IO密集型 start_time = time.time() list1 = [] for i in range(6): # 創建6個子行程 p = Process(target=task2) p.start() list1.append(p) for p in list1: p.join() end_time = time.time() print(f"【多行程-IO密集型】任務執行時間為 {end_time - start_time}")
執行時間:
【多執行緒-計算密集型】任務執行時間為 3.986522674560547 【多執行緒-IO密集型】任務執行時間為 3.0031485557556152 【多行程-計算密集型】任務執行時間為 2.277726650238037 【多行程-IO密集型】任務執行時間為 3.283907413482666
由上述例子就可以輕松得出結論,
2、對比使用結論
計算密集型:使用多行程(并行)
假設有100份原材料同時到達工廠,聘請100個工人同時制造,效率最高
IO密集型:使用多執行緒(并發)
假設有買了100份原材料,但是只要40份到達工廠,其他的還在路上,那么聘請40個工人先制造,效率最高
PS:多執行緒 “并發” 提交執行任務(代碼)
多行程 “并行” 提交執行任務(代碼)
IO密集型任務,假如每個任務執行4s
- 單核:
開啟執行緒比行程更加節省資源
- 多核:
- 多執行緒:
假如開啟4個子執行緒:共消耗 16s
- 多行程:
假如開啟4個行程:共消耗 16s + 申請開啟資源消耗的時間
計算密集型任務,假如每個任務執行4s
- 單核:
開啟執行緒比行程更加節省資源
- 多核:
- 多執行緒:
假如開啟4個子執行緒:共消耗 16s
- 多行程:
假如開啟4個行程:共消耗 4s
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/206929.html
標籤:其他
上一篇:這幾個C++的坑,一旦踩中了,加班是肯定避免不了了!
下一篇:協程
