1. 程式人生 > >執行緒與程序的聯絡,執行緒的優缺點。

執行緒與程序的聯絡,執行緒的優缺點。

程序概念 
  程序是表示資源分配的基本單位,又是排程執行的基本單位。例如,使用者執行自己的程式,系統就建立一個程序,併為它分配資源,包括各種表格、記憶體空間、磁碟空間、I/O裝置等。然後,把該程序放人程序的就緒佇列。程序排程程式選中它,為它分配CPU以及其它有關資源,該程序才真正執行。所以,程序是系統中的併發執行的單位。 
  在Mac、Windows NT等採用微核心結構的作業系統中,程序的功能發生了變化:它只是資源分配的單位,而不再是排程執行的單位。在微核心系統中,真正排程執行的基本單位是執行緒。因此,實現併發功能的單位是執行緒。
執行緒概念 
  執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。如果把程序理解為在邏輯上作業系統所完成的任務,那麼執行緒表示完成該任務的許多可能的子任務之一。例如,假設使用者啟動了一個視窗中的資料庫應用程式,作業系統就將對資料庫的呼叫表示為一個程序。假設使用者要從資料庫中產生一份工資單報表,並傳到一個檔案中,這是一個子任務;在產生工資單報表的過程中,使用者又可以輸人資料庫查詢請求,這又是一個子任務。這樣,作業系統則把每一個請求――工資單報表和新輸人的資料查詢表示為資料庫程序中的獨立的執行緒。
執行緒可以在處理器上獨立排程執行,這樣,在多處理器環境下就允許幾個執行緒各自在單獨處理器上進行。作業系統提供執行緒就是為了方便而有效地實現這種併發性
引入執行緒的好處
(1)易於排程。
(2)提高併發性。通過執行緒可方便有效地實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。
(3)開銷少。建立執行緒比建立程序要快,所需開銷很少。。
(4)利於充分發揮多處理器的功能。通過建立多執行緒程序(即一個程序可具有兩個或更多個執行緒),每個執行緒在一個處理器上執行,從而實現應用程式的併發性,使每個處理器都得到充分執行。
程序和執行緒的關係
(1)一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。
(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。
(3)處理機分給執行緒,即真正在處理機上執行的是執行緒。

(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。

===================================================================================

多執行緒的優點:

  • 無需跨程序邊界;
  • 程式邏輯和控制方式簡單;
  • 所有執行緒可以直接共享記憶體和變數等;
  • 執行緒方式消耗的總資源比程序方式好;

多執行緒缺點:

  • 每個執行緒與主程式共用地址空間,受限於2GB地址空間;
  • 執行緒之間的同步和加鎖控制比較麻煩;
  • 一個執行緒的崩潰可能影響到整個程式的穩定性;
  • 到達一定的執行緒數程度後,即使再增加CPU也無法提高效能,例如Windows Server 2003,大約是1500個左右的執行緒數就快到極限了(執行緒堆疊設定為1M),如果設定執行緒堆疊為2M,還達不到1500個執行緒總數;
  • 執行緒能夠提高的總效能有限,而且執行緒多了之後,執行緒本身的排程也是一個麻煩事兒,需要消耗較多的CPU

多程序優點:

  • 每個程序互相獨立,不影響主程式的穩定性,子程序崩潰沒關係;
  • 通過增加CPU,就可以容易擴充效能;
  • 可以儘量減少執行緒加鎖/解鎖的影響,極大提高效能,就算是執行緒執行的模組演算法效率低也沒關係;
  • 每個子程序都有2GB地址空間和相關資源,總體能夠達到的效能上限非常大

多執行緒缺點:

  • 邏輯控制複雜,需要和主程式互動;
  • 需要跨程序邊界,如果有大資料量傳送,就不太好,適合小資料量傳送、密集運算
  • 多程序排程開銷比較大;
================================================================