多核與多線(xiàn)程技術(shù)的區別到底在哪里?
毫無(wú)疑問(wèn)的,“多核”、“多線(xiàn)程”此二詞已快成為當今處理器架構設計中的兩大顯學(xué),如同歷史戰國時(shí)代以“儒”、“墨”兩大派的顯學(xué),只不過(guò)當年兩大治世思想學(xué)派是爭得你死我亡,而多核、多線(xiàn)程則是相互兼容并蓄,今日幾乎任何處理器都朝同時(shí)具有多核多線(xiàn)程的路線(xiàn)發(fā)展邁進(jìn)。
本文引用地址:http://dyxdggzs.com/article/80944.htm雖然兩詞到處可見(jiàn),但可有人知此二者的實(shí)際差異?在執行設計時(shí)又是以何者為重?到底是該多核優(yōu)先還是多線(xiàn)程提前?關(guān)于此似乎大家都想進(jìn)一步了解,本文以下試圖對此進(jìn)行個(gè)中差異的解說(shuō),并盡可能在不涉及實(shí)際復雜細節的情形下,讓各位對兩者的機制觀(guān)念與差別性有所理解。
行程早于線(xiàn)程
若依據信息技術(shù)的發(fā)展歷程,在軟件程序執行時(shí)的再細分、再切割的小型化單位上,先是有行程(Process),之后才有線(xiàn)程(Thread),線(xiàn)程的單位比行程更小,一個(gè)行程內可以有多個(gè)線(xiàn)程,在一個(gè)行程下的各線(xiàn)程,都是共享同一個(gè)行程所建立的內存尋址資源及內存管理機制,包括執行權階、內存空間、堆棧位置等,除此之外各個(gè)線(xiàn)程自身僅擁有少許因為執行之需的變量自屬性,其余都依據與遵行行程所設立的規定。
相對的,程序與程序之間所用的就是不同的內存設定,包括分頁(yè)、分段等起始地址的不同,執行權階的不同,堆棧深度的不同等,一顆處理器若執行了A行程后要改去執行B行程,對此必須進(jìn)行內存管理組態(tài)的搬遷、變更,而這個(gè)搬遷若是在處理器內還好,若是在高速緩存甚至是系統主存儲器時(shí),此種切換、轉移程序對執行效能的損傷就非常大,因為完成搬遷、切換程序的相同時(shí)間,處理器早就可以執行數十到上千個(gè)指令。
兩種路線(xiàn)的加速思維
所以,想避免此種切換的效率損耗,可以從兩種角度去思考,第一種思考就是擴大到整體運算系統的層面來(lái)解決,在一部計算機內設計、配置更多顆的處理器,然后由同一個(gè)操作系統同時(shí)掌控及管理多顆處理器,并將要執行的程序的各個(gè)程序,一個(gè)程序喂(也稱(chēng):發(fā)派)給一顆處理器去執行,如此多顆同時(shí)執行,每顆處理器執行一個(gè)程序,如此就可以加快整體的執行效率。
當然!這種加速方式必須有一個(gè)先決條件,即是操作系統在編譯時(shí)就必須能管控、發(fā)揮及運用多行程技術(shù),倘若以單行程的系統組態(tài)來(lái)編譯,那么操作系統就無(wú)法管控服務(wù)器內一顆以上的處理器,如此就不用去談?wù)撚刹僮飨到y負責讓?xiě)贸绦虻某绦蜻M(jìn)行同時(shí)的多顆同時(shí)性的執行派送。
即便操作系統支持多程序,而應用程序若依舊只支持單程序,那情形一樣是白搭,操作系統無(wú)法對單行程程序再行拆分,依然是只喂入單一顆處理器上去執行,無(wú)從加速。
同時(shí)用多顆處理器來(lái)執行,且每顆處理器執行一個(gè)行程,這是一種加速法,另一種加速法則是:盡量不進(jìn)行內存管理組態(tài)的切換,避免切換的效能折損,線(xiàn)程正是在此概念下所出現的產(chǎn)物。
不過(guò),線(xiàn)程也要程序的搭配才能發(fā)揮,線(xiàn)程的概念出現與落實(shí)已是“C++看消、Java看長(cháng)”的階段,所以C++只能通過(guò)API呼用的方式來(lái)支持與使用多線(xiàn)程,如此必須改寫(xiě)過(guò)往的程序才行,改寫(xiě)成有呼用到支持多線(xiàn)程的API才行。相對的,較C++晚問(wèn)世的Java則是原生支持多線(xiàn)程,不用改寫(xiě)也能發(fā)揮及運用多線(xiàn)程的特性及其加速效益。
有了線(xiàn)程后,執行的分割、切割更加細膩,線(xiàn)程機制不僅在多顆處理器的系統內可以加速,在單顆處理器內也一樣能獲得好處,在多顆處理器的系統上每顆處理器不僅可以單獨執行一個(gè)程序,當然也可以單獨執行一個(gè)線(xiàn)程,而在單處理器系統上因為省去內存管理組態(tài)的搬遷,所以一樣可以加速,很明顯的,線(xiàn)程使執行的發(fā)派、分配更加細膩與靈活化。
線(xiàn)程的副作用
線(xiàn)程雖有好用的優(yōu)點(diǎn),不過(guò)它也有副作用的缺點(diǎn),且此一優(yōu)缺是一體兩面無(wú)從分割,缺點(diǎn)是各個(gè)線(xiàn)程共享同一組內存管理組態(tài)及機制,倘若有一個(gè)線(xiàn)程的執行發(fā)生錯誤、瑕疵、或遭入侵等,其余在同一個(gè)行程內的每個(gè)線(xiàn)程也都會(huì )遭受影響、波及,最嚴重是同一個(gè)行程內的一切都錯亂、毀壞,由此可知:線(xiàn)程其實(shí)是帶有若干安全性犧牲的加速法。
此外有人會(huì )誤會(huì ),就字面上而言,多核表示同時(shí)間有多顆處理器在執行,每顆處理器可以執行一個(gè)行程或一個(gè)線(xiàn)程,但是一顆具有多線(xiàn)程能力的處理器并不表示它可以同時(shí)執行多個(gè)線(xiàn)程,事實(shí)上在同一時(shí)間內一顆具多線(xiàn)程功效的處理器也依然是執行一個(gè)線(xiàn)程而已,只是多線(xiàn)程處理器的內部可以將原有線(xiàn)程的相關(guān)信息及變量暫時(shí)擱擺,然后去執行其它的線(xiàn)程,執行完后在切換回原來(lái)執行到一半的線(xiàn)程,甚至沒(méi)執行完也可以切換回來(lái),且整個(gè)切換過(guò)程都在處理器內進(jìn)行,不用與快取與內存進(jìn)行搬遷置換,如此以快速換線(xiàn)程執行的方式來(lái)加速。
相對于此的,一顆不具多線(xiàn)程能力的處理器,執行一個(gè)線(xiàn)程到一半若想改執行另一個(gè)線(xiàn)程,就必須將原線(xiàn)程、現線(xiàn)程的相關(guān)內容與信息搬遷到快取或內存,然后自快取及內存引入另一個(gè)線(xiàn)程,由于此一搬轉頗耗時(shí),所以多半選擇將原有的線(xiàn)程執行完再引入下一個(gè)線(xiàn)程,如此在時(shí)間上可能還比較經(jīng)濟。然而無(wú)論一線(xiàn)程完整執行后再執行下一個(gè)線(xiàn)程,還是進(jìn)行線(xiàn)程的進(jìn)出搬遷轉移,都不會(huì )比具備多線(xiàn)程能力的處理器來(lái)的快速有效。
至此我們可以歸納整理:
1.多核、多處理器系統中的每顆處理器(每個(gè)核),同時(shí)間內可以執行各自不同的行程(或線(xiàn)程)。
2.一顆多線(xiàn)程能力的處理器,無(wú)論是支持二線(xiàn)程、四線(xiàn)程、八線(xiàn)程,這些線(xiàn)程都必須是在同一個(gè)行程內,所以一顆處理器(一個(gè)核)還是只能執行一個(gè)行程,雙核處理器就能夠同時(shí)執行兩個(gè)不同的行程(或線(xiàn)程),四核就可以同時(shí)不同的四個(gè)行程(或線(xiàn)程)。
3.倘若是執行不支持多線(xiàn)程的程序,其執行上的分拆最多只到行程而未到線(xiàn)程,那么每顆處理器內的多線(xiàn)程功效就無(wú)從發(fā)揮,而這類(lèi)的程序歷史較長(cháng)久,相對的原生支持多線(xiàn)程的程序歷史較短,不過(guò)信息技術(shù)的腳步向來(lái)進(jìn)展快速,兩種不同層次的支持僅差距數年時(shí)間。
產(chǎn)業(yè)實(shí)際發(fā)展可為證明
真的是多核優(yōu)于、先于多線(xiàn)程嗎?關(guān)于此可通過(guò)產(chǎn)業(yè)實(shí)際發(fā)展做為應證,Sun的UltraSPARC T1處理器(研發(fā)代號:Niagara)是八核四線(xiàn)程的設計,但接續的UltraSPARC T2處理器(研發(fā)代號:Niagara 2)則是八核八線(xiàn)程的設計,所以是核多、核優(yōu)先,然后再來(lái)拉跋、提升線(xiàn)程的執行。
同樣的,IBM為Microsoft Xbox 360所設計的Xenon處理器,是個(gè)三核二線(xiàn)程的設計,核數依然是高于線(xiàn)程數,又如IBM、Sony、Toshiba三家業(yè)者合研的Cell處理器,現有第一代的Cell(研發(fā)代號:DD1)是九核,組態(tài)上是八核媒體(SPE)、一核泛用(PPE),新一代的Cell(研發(fā)代號:DD2)也針對PPE的部分進(jìn)行雙線(xiàn)程發(fā)展,如此再次表示核比線(xiàn)程重要,當Cell僅進(jìn)行增一線(xiàn)程的擴展改進(jìn)時(shí),而非再增一核,即可知這僅是一次小幅的改進(jìn)。
“多核”、“多線(xiàn)程”之外 還有“多令”、“多機”
最后,且讓我們談?wù)勁c多核、多線(xiàn)程不同加速走向的“多令”,“多令”是筆者發(fā)明的詞,指的是比執行行程(Process)、線(xiàn)程(Thread)更基底層次的執行指令(Instruction),多核的作法是盡可能在同時(shí)間內執行多個(gè)行程,多令則是盡可能在同時(shí)間內執行多個(gè)指令,學(xué)術(shù)上的VLIW與產(chǎn)業(yè)上的EPIC皆是多令理念下的架構。
到目前為止多令并非不可行,但僅行于數字信號、圖像等處理,繪圖芯片、媒體處理器等多實(shí)行VLIW架構,然多令在泛用運算上卻未見(jiàn)效益,至于科學(xué)研究之類(lèi)的高效運算也傾向使用更高層次的平行:多機(叢集、網(wǎng)格,執行范疇與分配類(lèi)同于線(xiàn)程、行程),看來(lái)多令、多程/線(xiàn)程、多機各有所用,端看運用場(chǎng)合的適切性。
評論