我們聊聊單核可以實現(xiàn)多線程嗎?
首先答案是“可以”,接下來就說說為啥可以。解釋此問題可以從兩個方面思考,一個是計算機如此復雜和強大的根本原因是什么?一個是硬件與軟件的依賴關(guān)系是怎樣的?明確了這兩個問題的答案后,再回頭看本問題,就會發(fā)現(xiàn)單核能夠?qū)崿F(xiàn)多線程是多么理所當然的事。
一、計算機如此復雜和強大的原因
了解過計算機和操作系統(tǒng)歷史的人應該很快就能發(fā)現(xiàn),計算機之所以會變得如此復雜和強大完全是“單核多任務”的實現(xiàn)與不斷擴展導致的。計算機就是因為要實現(xiàn)“單核多任務”而變得復雜的,同時也是因為實現(xiàn)了“單核多任務”變得強大,然后在對“單核多任務”的不斷擴展中變得更加強大。比如操作系統(tǒng)在最開始就只是個簡單的“批處理系統(tǒng)”,本質(zhì)就是個多任務管理工具,且是非并發(fā)的。
開始的計算機雖然龐大,但是遠沒有今天體積小得多的計算機強大和復雜。為啥呢?因為它處理的任務非常單一,而且并發(fā)性也很低。開始時就根本沒有并發(fā),只能執(zhí)行最基本的純數(shù)學計算,在徹底完成一個計算任務前無法開始第二個任務,就算開始第二個任務都要人來輔助操作。而其復雜化則是隨著任務之自動推進的實現(xiàn),以及進一步“并發(fā)”的實現(xiàn)開始跨越式發(fā)展的。
而所謂“單核實現(xiàn)多線程”的本質(zhì)是啥呢?本質(zhì)不就是“單核多任務”嗎?只是這個“任務模型”比傳統(tǒng)的“進程模型”顆粒更小了一點,從而進一步增加并發(fā)提升效率,對計算機的“單核多任務”這個核心模型而言,僅僅是量變,這為啥不能支持?答案當然就是支持。
二、計算機硬件與軟件的依賴關(guān)系
不同軟件對硬件的依賴程度區(qū)別很大,依賴最強的就是“固件”,它隨硬件的生產(chǎn)一起被燒錄在硬件上,一度只能讀不能寫,后面即使可以改動也要用“非常”手段,這種軟件顯然受硬件影響最大,典型的比如BIOS系統(tǒng)。但還有一種軟件,其存在就是為了“無視硬件區(qū)別”的,賣點就是“跨平臺”,它受硬件的制約就非常小,比如Java程序。
“單核”其實描述的是一種“硬件狀態(tài)”,而“多線程”是一種軟件機制,而且是很“軟”那種,其實現(xiàn)離“硬件的細節(jié)”距離很遠,受硬件的影響很小,與硬件是一種“解耦”狀態(tài),是“跨平臺”的。就像學習匯編指令一般都會參照某個具體的機型進行,因為它是一種與硬件依賴性很強的軟件,但是學進程或者線程這種任務機制,你有見過哪本教材要強調(diào)“機型”嗎?
為啥不強調(diào)呢?當然就是與其無關(guān)或不受其影響,既然不受其影響,當然就是單核也好多核也罷,多線程機制都無所謂,都可以基于它們進行實現(xiàn)。
三、總結(jié)
最后補充一點的就是,本文標題為了方便說明,直接援引了別人的提問方式,而嚴謹?shù)恼f法不應該是“單核可以實現(xiàn)多線程嗎?”,而是“單核支持多線程嗎?”,因為多線程就不是“核”這個硬件實現(xiàn)的,而是一種純軟件的實現(xiàn)。