天天看點

多核和單核中多線程及單線程的特點

關鍵詞:單線程;多線程;線程同步;優先級  

“Andy Grove giveth, and Bill Gates taketh away”是流行在業界的一句諺語,它描述了一個有趣的現象:無論處理器能夠提供多高的性能,軟體都能夠将它們統統“消化”掉。在過去幾十年裡,被處理器技術領域奉為金科玉律的“摩爾定律”一直處于雷打不動的地位。但就在近兩年,傳統處理器體系結構技術面臨着性能的瓶頸。人們逐漸發現過去慣常的技術方案已經不能夠在處理器設計領域獲得更高的收益。處理器的設計者們開始思考新的技術架構,試圖推動處理器的性能能夠遵照“摩爾定律”得到繼續提高。處理器的硬體架構作為計算機系統中最核心的技術,它的變革勢必會導緻業界的一系列動蕩。特别是軟體開發者們就首當其沖地迎來了新的契機與挑戰。為了能夠享受到新的處理器技術帶來的這場“盛宴”,就必須迎接一場具有颠覆性的革命。 

線程(Thread)是程序的一個實體,是CPU排程和分派的基本機關。線程不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個線程執行控制。  

程序(Process)是具有一定獨立功能的程式關于某個資料集合上的一次運作活動,是系統進行資源配置設定和排程的一個獨立機關。程式隻是一組指令的有序集合,它本身沒有任何運作的含義,隻是一個靜态實體。而程序則不同,它是程式在某個資料集上的執行,是一個動态實體。它因建立而産生,因排程而運作,因等待資源或事件而被處于等待狀态,因完成任務而被撤消,反映了一個程式在一定的資料集上運作的全部動态過程。  

  線程和程序的關系是:線程是屬于程序的,線程運作在程序空間内,同一程序所産生的線程共享同一記憶體空間,當程序退出時該程序所産生的線程都會被強制退出并清除。線程可與屬于同一程序的其它線程共享程序所擁有的全部資源,但是其本身基本上不擁有系統資源,隻擁有一點在運作中必不可少的資訊(如程式計數器、一組寄存器和棧),程序并不真正得運作程式,他隻是配置設定資源得機關,隻有線程才是真正得運作體 ,是以一個程序最少有一個主線程。 

程序和線程都是作業系統的概念。程序是應用程式的執行執行個體,每個程序是由私有的虛拟位址空間、代碼、資料和其它各種系統資源組成,程序在運作過程中建立的資源随着程序的終止而被銷毀,所使用的系統資源在程序終止時被釋放或關閉。 

    線程是程序内部的一個執行單元。系統建立好程序後,實際上就啟動執行了該程序的主執行線程,主執行線程以函數位址形式,比如說main或WinMain函數,将程式的啟動點提供給Windows系統。主執行線程終止了,程序也就随之終止。每一個程序至少有一個主執行線程,它無需由使用者去主動建立,是由系統自動建立的。使用者根據需要在應用程式中建立其它線程,多個線程并發地運作于同一個程序中。一個程序中的所有線程都在該程序的虛拟位址空間中,共同使用這些虛拟位址空間、全局變量和系統資源,是以線程間的通訊非常友善,多線程技術的應用也較為廣泛。   

傳統的應用程式都是單線程的,即在程式運作期間,由單個線程獨占CPU的控制權,負責執行所用任務。在這種情況下,程式在執行一些比較費時的任務時,就無法及時響應使用者的操作影響了應用程式的實時性能。在監控系統,特别是遠端監控系統中,應用程式往往不但要及時把監控對象的最新資訊回報給監視客戶(通過圖形顯示),還要處理本地機與遠端機之間的通信以及対控制對象的實時控制等任務,這時,僅僅由單個線程來完成所用任務,顯然無法滿足監控系統的實時性要求。在DOS系統下,這些工作可以由中斷來完成。而在Windows NT下,中斷機制対使用者是不透明的。為此,可引進多線程機制,主線程專門負責消息的響應,使程式能夠響應指令和其他事件。輔助線程可以用于完成其他比較費時的工作,如通信和背景列印等,這樣就不至于影響主線程的運作。 

在新一代處理器體系結構的研究中,各種新技術層出不窮。在目前逐漸趨于成熟的技術當中,有三項技術已經被應用于新一代處理器當中。它們分别是:單核多線程技術、單片多核(CMP)技術和Cache技術。  

單核多線程技術是指在單個處理器核上同時運作兩個或更多個線程。目前已經應用在具有超線程結構的奔騰4處理器當中。  

CMP技術是指在單個晶片内內建兩個或更多個真正的處理器核,不同的線程同時運作在不同的處理器核上。采用CMP的晶片有很多,比如Sparc和PowerPC都已經有了産品,Intel和AMD也在今年推出了各自的多核晶片。  

Cache技術作為處理器關鍵技術中的“常青樹”,仍舊會有長足的發展,這主要是因為Cache不命中導緻的訪存延遲代價實在太高。未來Cache技術的發展方向主要展現在容量的增加上。  

過去所有在單核處理器上開發的串行應用軟體仍舊可以在新一代處理器體系結構上運作。但僅這樣不能充分利用新一代處理器架構帶來的性能優勢,是一種“暴殄天物”的做法。可以毫不誇張地說,新一代處理器體系結構給軟體産業帶來的将是一場革命:它要求軟體設計者們務必摒棄之前傳統的串行程式設計方法,去掌握多線程并行的程式設計理念。 

多線程是這樣一種機制,它允許在程式中并發執行多個指令流,每個指令流都稱為一個線程,彼此間互相獨立。  

    多個線程的執行是并發的,也就是在邏輯上“同時”,而不管是否是實體上的“同時”。如果系統隻有一個CPU,那麼真正的“同時”是不可能的,但是由于CPU的速度非常快,使用者感覺不到其中的差別,是以我們也不用關心它,隻需要設想各個線程是同時執行即可。