鐵路與多核多執行緒
楊小華多核多執行緒已經成為當前乙個時髦的話題,早在2023年c++大師herb sutter就說過免費的午餐已經結束,併發程式設計的時代已經來臨。從接觸第乙個多執行緒專案以來,已經是第三個年頭了,一直想把這幾年的點點滴滴寫成文章,讓剛接觸的人少走彎路,這便是我寫這篇系列文章的初衷。
如何理解多核多執行緒這些概念呢?
在自然世界中,總有那麼一些事物是類似的。如果我們加以抽象和歸納,就可以得出相同或者相類似的結論,比如鐵路系統和多核多執行緒就有相似之處。
對於任何一名出門在外的人來說,春節能買張回家的火車票,不能不說是人生的一大幸事。相信大家在排隊買票的時候,曾經都抱怨過,怎麼不多增開幾列火車,讓大家早點回家呢?當這種想法開始在大腦中萌發時,證明您已經擁有了多執行緒的思想。對於相同的出發地和目的地,通過增開列車的方法來提高運輸效率,就相當於在乙個程序中採用多執行緒的方法來提高程式的吞吐率。
從成本和資源利用率的角度考慮,不可能為不同的目的地修建單獨的鐵路,而會共享相關路段。當不同列車需要同時使用同一路段時,就會造成道路的競爭,交通一旦擁塞,效率開始變的低下和事故頻發。為了解決這個問題,訊號燈開始出現在關鍵岔口上,只有當列車收到允許通過的資訊後,才能繼續前行。如果從多執行緒的角度來看待道路競爭引發的問題,可以認為是執行緒的同步問題。在多執行緒程式中,可以利用各種鎖或者訊號量等同步手段來解決資源衝突的矛盾,只有解決了資源衝突問題,才能保證程式的正確性。
是不是多增開幾列火車,就可以緩解買票難的問題呢(這裡不討論各方利益的問題)?臨客便開始出現在人們的視野中。 如果臨客和其他列車擁有相同的待遇,在關鍵路徑上,按照fifo的策略,排隊一一通過,就有可能造成大量的火車晚點,久而久之,最終造成整個鐵路系統的癱瘓。於是引入了優先順序的概念,一旦發生資源衝突時,臨客就停下來到旁邊歇歇,讓道給高優先順序的大佬們(d/z/t/k/n等開頭的火車)。 從作業系統的角度來觀察臨客的解決方案,這個過程相當於多執行緒中的執行緒排程,讓不同的執行緒擁有不同的優先順序和排程策略,來提高程式的整體效率。
解決了臨客的排程問題,真的可以解決買票難的問題嗎?不能,於是新的方案—— 大修鐵路——又被提上了日程, 減少關鍵資源的衝突,讓不同目的地的火車在不同鐵路線路上馳騁。這種方法就相當於我們今天談論的多核技術,讓不同功能的程序在不同的核上執行,或者讓同一程序的不同功能的執行緒執行在不同的核上。
將多核多執行緒與實際生活中的例子進行模擬,多核多執行緒顯得並不神秘。它只是用來提高程式執行效率的一種手段,暫時還不會打破現有的程式設計模式。
單核 多核 多執行緒
1 鎖競爭 單核中,如果單個執行緒取得所,則獲取cpu執行時間,其他等待獲取鎖的執行緒被阻塞。使用了鎖,影響的只是枷鎖和解鎖的耗時,cpu始終執行。多核中,若2個 更多 執行緒使用同一把鎖,則會導致cpu飢餓。實際還是序列化執行!2 執行緒分解和執行的區別 對單核cpu,對客戶端軟體,採用多執行緒,...
關於多執行緒和多核
上一次上嵌入式c語言的課,因為 太過活躍 導致獲得了乙個調研執行緒和多核的任務,呵呵。黃少珉老師都發話了,別人考試時安裝平時成績和最後期末考試兩部分為基準 我是三部分,多乙個這個的調研。今天下午花了點時間,在網上搜了點資料然後自己做了點實驗,簡單報告如下 執行平台 首先我們來看下面這段 執行這段 看...
多核多執行緒技術程式設計
幾年之前,cpu的效能還主要取決於cpu的主頻,經過超摩爾定律的發展後,沒過多長時間cpu的主頻速度就已接近 極限 使得單單靠提高cpu的主頻來提公升效能變得非常困難。目前,intel amd等cpu生產商都轉而採用了多核技術來提公升cpu效能,甚至提出了群核cpu的概念。這意味著,要充分發揮多核c...