今天,不分享複雜高深的東西了,僅來聊聊程序、執行緒、協程對cpu的消耗問題,並用實際**來驗證,加深對這些概念的理解。
另外,值得一提的是,程序、執行緒、協程幾乎是筆試面試必考的內容。而且,在實際開發中,也有必要深入理解這些基礎概念。
c語言死迴圈程式如下:
開啟單程序,可以看到,大約消耗100%的cpu核:int main()
開啟2個程序,可以看到,總共大約消耗100%的cpu核:
c語言多執行緒程式如下:
2個執行緒總共大約消耗100%的cpu核:#include
#include
void* threadfunc(void* p)
int main ()
go語言多協程程式如下:
2個協程總共大約消耗100%的cpu核:
通過如上實際驗證可以發現:在單核cpu情況下,無論怎麼開啟程序、執行緒和協程,最多消耗100%的cpu核。
c語言死迴圈程式如下:開啟單程序,大約消耗100%的cpu核,即1個核:int main()
開啟2個程序,總共大約消耗200%的cpu核,即2個cpu核:
c語言多執行緒程式如下:
2個執行緒總共大約消耗200%的cpu核,即2個cpu核:#include
#include
#include
void* threadfunc(void* p)
int main ()
go語言多協程程式如下:
2個協程總共大約消耗200%的cpu核,即2個cpu核:package main
func f()
}
func main ()
}
通過實際驗證可以發現:在多核情況下,採用多程序、多執行緒、多協程,能更好地利用cpu, 它們不僅能併發執行,而且能並行執行。
另外,值得一提的是,即使在單核情況下,多程序、多執行緒、多協程也是能更好利用cpu的。想一想,為什麼?這是很基本的問題。
通過本文的實際驗證,我們能更好地理解多程序、多執行緒、多協程對單核、多核cpu的消耗,順便理解併發和並行的含義與區別。
程序 執行緒 協程
多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...
程序 執行緒 協程
程序是系統資源分配的最小單位,系統由乙個個程序 程式 組成。一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 檔案描述符表 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於...
執行緒 程序 協程
執行緒是作業系統中進行運算排程的最小單位。執行緒被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序可以併發多個執行緒,每條執行緒並行執行不同的任務。乙個執行緒是乙個execution context 執行上下文 即乙個cpu執行時所需要的一串指令。每個獨立...