這篇文章解答了我心中的疑問,那就是操作系統會自動調度cpu資源來處理多進程,多線程的并發。
早在上世紀90年代末,就有眾多業界人士呼吁用CMP(單芯片多處理器)技術來替代復雜性較高的單線程CPU。IBM、惠普、Sun等高端服務器廠商,更是相繼推出了多核服務器CPU。不過,由于服務器價格高、應用面窄,并未引起大眾廣泛的注意。直到AMD搶先手推出64位處理器后,英特爾才想起利用“多核”這一武器進行“帝國反擊戰”。2005年4月,英特爾倉促推出簡單封裝雙核的奔騰D和奔騰四至尊版840。AMD在之后也發布了雙核皓龍(Opteron)和速龍(Athlon) 64 X2和處理器。但真正的“雙核元年”,則被認為是2006年。這一年的7月23日,英特爾基于酷睿(Core)架構的處理器正式發布。
雙核的優勢不是頻率,而是對付同時處理多件事情。一個核心理論上同時只能干一件事,比如你同時在后臺BT下載,前臺一邊看電影一邊拷貝文件一邊聯QQ……,這么多程序同時需要CPU來響應,怎么辦?靠操作系統! window本身就是多線程操作系統(DOS就是單線程系統,dos下2核4核和單核沒區別,處理一個任務時必須停下來等待處理結束才能干下一件事),它可以把每個處理任務劃分為多“份”(一個任務可以由多個進程來實現,把每個進程又分為多個線程,然后由操作系統協調分配多核來處理排隊的線程,最后把處理結果合并),多個處理任務按順序排成隊列,這樣單核心的CPU可以一次處理一“份”,輪流處理每個程序的“份”,這樣你感覺就是CPU同時在干幾件事了。但如果CPU不夠強勁,同時排隊等待處理的東西太多了,你就會感覺系統在等待,有延時,反應慢等等癥狀。再或者某個程序出現錯誤,死機了,很可能造成后面排隊的其他任務都在那里干等,造成系統無反應的情況,按熱啟鍵都沒反應。理論上如果現在有顆6G頻率的單核CPU,單論處理性能應該與1個3G雙核近似,甚至更高一些,因為目前雙核比單核也就快不到2倍。 原本計算機一直以單核心的工作頻率作為性能的衡量,之所以放棄單核是因為目前的技術水平令單核性能繼續提升遇到了瓶頸,4G P4的夭折讓依靠頻率提升性能的路子走進死胡同,不得已改走多核心路線,以核心數量來彌補處理能力的不足。不過慢慢的這些多核心的頻率又開始奔3G去了,隨著45nm的出現,雙核上4G應該可以想象,所以一方面每個核心的性能還在發展,另一方面多核心集成的手段雙管齊下,這樣CPU的性能可以迅速提升,繼續保持摩爾定律。
多核CPU就是基板上集成有多個單核CPU,早期PD雙核需要北橋來控制分配任務,核心之間存在搶二級緩存的情況,后期酷睿自己集成了任務分配系統(硬件上),再搭配操作系統(軟件上)就能真正同時開工,2個核心同時處理2“份”任務,速度快了,萬一1個核心死機,起碼另一個U還可以繼續處理關機、關閉軟件等任務。較早的操作系統如XP等需要裝雙核或多核補丁,能更好發揮性能或更穩定,Vistia下就不需要。 目前幾乎所有的程序在編寫時是按單核心CPU寫的(多核心程序優化對程序員來說是個噩夢,目前好像還沒有合適的編程軟件能讓程序員輕松編寫針對多核心的程序),因此對多核的利用率不是很高,分配任務時,往往1個核心滿負荷,另一個還有空閑(留些空閑也對,要應付隨時發生的其它命令)。一般2核心性能也就比單核心高60~70%甚至更低。 4核或者將來的8核說白了還是多個核心獨自處理各自的“份”,不過人多力量大,速度快,響應時間短,不易死機。當然耗電、協調性都會是個考驗。 補充: 原本有個說法(有陣子我自己就持這觀點):“目前的軟件都是為單核心編寫的,多核CPU處理起來也沒什么優勢。” 經過分析我們可以得知,參與任務分配的主角一是程序自己,二是操作系統,即使如單任務的SuperPI,在雙核下成績也要比同頻率的單核快不少,這就是事實證明。理論分析:單線程程序很傻,不知道有2個CPU在前面等著,所以發出的請求應該也是針對單核心的,但操作系統自動將調用請求分配給了2個CPU,并在處理結束后將結果合并,所以單核心程序也能享受到多核的“照顧”。盡管操作系統分配的可能不完美,但畢竟比單CPU要快。 如果程序自己又對多線程處理進行了優化(重新編寫),那么就更完美了,可以達到2倍水平,對于這點5樓的朋友已經能舉出具體的例子了。非常感謝。 再推測一下,根據上面的分析,2G雙核應該比2G單核快近2倍,那么2G的4核應該比2G的雙核快近2倍!如果有4G的雙核,那么應該和2G的4核性能近似。
? ? ? ?對于多核CPU,優化操作系統任務調度算法是保證效率的關鍵。一般任務調度算法有全局隊列調度和局部隊列調度。前者是指操作系統維護一個全局的任務等待隊列,當系統中有一個CPU核心空閑時,操作系統就從全局任務等待隊列中選取就緒任務開始在此核心上執行。這種方法的優點是CPU核心利用率較高。后者是指操作系統為每個CPU內核維護一個局部的任務等待隊列,當系統中有一個CPU內核空閑時,便從該核心的任務等待隊列中選取恰當的任務執行,這種方法的優點是任務基本上無需在多個CPU核心間切換,有利于提高CPU核心局部Cache命中率。目前多數多核CPU操作系統采用的是基于全局隊列的任務調度算法