【目錄】
一、什么是執行緒
二、什么是多執行緒
三、為何要用多執行緒
四、執行緒 PK 行程
一、什么是執行緒
# 在傳統作業系統中,每個行程有一個地址空間,而且默認就有一個控制執行緒
# 執行緒,顧名思義,就是一條流水線作業的程序,一條流水線必須屬于一個車間,一個車間的作業程序是一個行程,
車間負責把資源整合到一起,是一個資源單位,而一個車間內至少有一個流水線
流水線的作業需要電源,電源就相當于cpu
所以,行程只是用來把資源集中到一起(行程只是一個資源單位,或者順澩集合),而執行緒才是cpu上的執行單位,
二、什么是多執行緒
多執行緒(即多個控制執行緒)的概念是,在一個行程中存在多個控制執行緒,多個控制執行緒共享該行程的地址空間,
相當于一個車間內有多條流水線,都共用一個車間的資源,
三、為何要用多執行緒
多執行緒指的是,在一個行程中開啟多個執行緒,
簡單的講:如果多個任務共用一塊地址空間,那么必須在一個行程內開啟多個執行緒,詳細的講分為4點:
1. 多執行緒共享一個行程的地址空間
2. 執行緒比行程更輕量級,執行緒比行程更容易創建、可撤銷,在許多作業系統中,創建一個執行緒比創建一個行程要快10-100倍,在有大量執行緒需要動態和快速修改時,這一特性很有用
3. 若多個執行緒都是cpu密集型的,那么并不能獲得性能上的增強,但是如果存在大量的計算和大量的I/O處理,擁有多個執行緒允許這些活動彼此重疊運行,從而會加快程式執行的速度,
4. 在多cpu系統中,為了最大限度的利用多核,可以開啟多個執行緒,比開行程開銷要小的多,(這一條并不適用于python)
# 計算密集型 from multiprocessing import Process from threading import Thread import os,time def work(): res = 0 for i in range(10000000): res *= i if __name__ == '__main__': l = [] print(os.cpu_count()) # 獲取當前計算機CPU個數 start_time = time.time() for i in range(12): p = Process(target=work) # 1.4679949283599854 t = Thread(target=work) # 5.698534250259399 t.start() # p.start() # l.append(p) l.append(t) for p in l: p.join() print(time.time()-start_time)計算密集型
IO密集型
四、執行緒 PK 行程——巧借‘工廠流水線’去理解
1、創建行程的開銷要遠大于執行緒
2、行程之間是競爭關系,執行緒之間是協作關系
參考資料:
https://www.cnblogs.com/linhaifeng/articles/7430082.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154307.html
標籤:Python
上一篇:集成學習之Xgboost
下一篇:scrapy item參考時報錯
