1. 程式人生 > >多核和單核中多執行緒及單執行緒的特點

多核和單核中多執行緒及單執行緒的特點


關鍵詞:單執行緒;多執行緒;執行緒同步;優先順序  
“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的速度非常快,使用者感覺不到其中的區別,因此我們也不用關心它,只需要設想各個執行緒是同時執行即可。