一、程序
程序和執行緒是包含關係,每個程序中都至少有一條執行緒
程序是計算機最小的資源分配單位
可以利用多核,可以實現並行
資料隔離
建立、銷毀、切換的時間開銷都比較大
隨著開啟的數量增加給作業系統帶來壓力
使用場景:充分利用多核,高計算型的程式,但啟動的數量有限
二、執行緒
執行緒是程序的一部分
執行緒是被cpu排程的最小單位
執行緒的切換是由作業系統完成的
在cpython直譯器下不能利用多核,資料共享
建立、銷毀、切換的時間開銷都比程序小很多
隨著開啟的數量增加給作業系統帶來壓力
使用場景:高io型,一些協程現有的模組不能規避io操作的功能,適合使用多執行緒
三、協程
協程的切換工作是使用者完成的
協程是乙個執行緒,完全不能利用多核,也不會產生資料不安全的現象
多個任務之間互相切換不依賴作業系統,無論開啟多少個協程都不會給作業系統帶來負擔
開銷比執行緒小
使用場景:高io型,通用的場景可以用協程現有的模組來規避一些io操作
四、執行緒和協程的區別
協程不會產生資料不安全的現象,執行緒會產生。
執行緒的排程不能干預,只能寫自己的邏輯,排程的事情由作業系統來
協程是使用者自己控制,能搶占更多的cpu資源取決於切換的策略(雙刃劍)
程序 執行緒 協程
多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...
程序 執行緒 協程
程序是系統資源分配的最小單位,系統由乙個個程序 程式 組成。一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 檔案描述符表 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於...
執行緒 程序 協程
執行緒是作業系統中進行運算排程的最小單位。執行緒被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序可以併發多個執行緒,每條執行緒並行執行不同的任務。乙個執行緒是乙個execution context 執行上下文 即乙個cpu執行時所需要的一串指令。每個獨立...