簡單理解 程序 執行緒 協程

2022-08-12 17:12:10 字數 2032 閱讀 5538

從計算機硬體角度:

計算機的核心是cpu,所有計算任務都由cpu負責。

單個cpu核心,在乙個cpu時間片裡,只能執行乙個程式任務。

台式電腦 intel i5 處理器 四核四執行緒:

四個cpu核心,每個核心有乙個邏輯處理器

同時可以處理四個任務。

台式電腦 intel i7 處理器 四核八執行緒 (intel 超執行緒技術)

四個cpu核心,每個核心有兩個邏輯處理器,

同時可以處理八個任務。

注意:cpu的x核x執行緒,和作業系統排程的執行緒,不是一回事。

從作業系統角度:

程序和執行緒,都是cpu執行任務的執行單元。

程序:表示乙個程式的執行活動(上下文管理,開啟、讀寫、關閉)

執行緒:表示程序工作時的最小排程單位(執行功能a,執行功能b...)

乙個程式至少有乙個程序,乙個程序內至少有乙個執行緒

並行:執行單元cpu == 執行的任務

任務1: ----------

任務2: ----------

任務3: ----------

併發:執行單元cpu < 執行的任務

乙個cpu、3個任務

任務1:------                  -------

任務2:      ------      ------

任務3:            ------

多程序 和 多執行緒:

表示乙個程式可以同時執行多個任務,程序和執行緒排程都是有作業系統完成。

多程序:程序和程序之間不共享任何狀態,每個程序都有自己獨立的記憶體空間。

如果程序之間做資料通訊或切換,作業系統開銷很大。

多執行緒:同乙個程序下的多執行緒共享,該程序的記憶體空間,

如果執行緒之間做資料通訊和切換,作業系統開銷很小。

共享意味著競爭,可能會帶來資料的安全隱患,所以有了"互斥鎖"。

互斥鎖:一種安全有序的讓多個執行緒訪問程序記憶體空間的機制,避免產生資料安全問題。

解釋型語言:利用直譯器按行執行**,程式執行後做語法檢查。

編譯型語言:利用編譯器編譯**生成可執行檔案,程式執行前做語法檢查。

gil 全域性直譯器鎖: 同一時刻只能有乙個執行緒在工作。

python只有乙個gil,當執行緒需要執行任務時必須獲取gil,那麼其他執行緒就處理等待狀態。

壞處:不能充分利用cpu多核資源。

好處:直接從根本上杜絕了多執行緒訪問記憶體空間的安全問題。

當程式執行乙個io阻塞的函式時,直譯器會釋放gil。

如果程式中沒有io阻塞操作,直譯器會每隔100次操作,會釋放gil,讓其他執行緒嘗試工作。

sys.getcheckinterval()

多程序:密集cpu任務(大量的平行計算),可以充分使用多核cpu的資源。

multiprocessing

缺點:程序之間通訊和切換成本高,如果需要大量資料通訊和切換的場景,不適合用多程序。

多執行緒:密集i/o任務(網絡卡io、磁碟io、資料庫io)

threading、 multiprocessing.dummy

優點:執行緒之間通訊成本和切換開銷極小。

缺點:在python裡乙個cpu時間片只能執行乙個執行緒,不能充分利用多核cpu的資源。

協程:在單執行緒上執行多個任務,任務排程由程式設計師控制,基於使用者管理,不受作業系統控制。

所以沒有執行緒,程序的切換開銷,也不需要處理互斥鎖。

通過**邏輯,不停的切換需要指定的函式。

gevent

from gevent import monkey

monkey.patch_all()

給python底層的網路庫(socket、select)打個補丁,在處理網路io任務時,可以按非同步非阻塞方式執行。

優點:不經過作業系統排程,所以執行效率高。

缺點:因為是單執行緒執行,所以處理cpu密集任務、密集本地io 不合適。

多程序:密集cpu任務

多執行緒:密集io任務

協程:密集網路io任務

主線程結束後,非守護執行緒不會結束,守護執行緒會結束,python預設建立的執行緒都是非守護執行緒。

程序 執行緒 協程理解

批處理 指乙個處理完了另乙個再處理 程序 即每個程式的執行的 全部流程 加上執行現場 當前執行場景 併發 因為多個程式在乙個cpu上不斷切換,人類看起來如同程式在同時執行,這就是併發 並行 即多個程式同時在多個cpu上執行,就是並行 執行緒 程序內部,有多個執行流程 加上每個流程的執行場景 這個流程...

程序 執行緒 協程

多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...

程序 執行緒 協程

程序是系統資源分配的最小單位,系統由乙個個程序 程式 組成。一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 檔案描述符表 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於...