1. 程式人生 > >任務、程序、執行緒之間的區別

任務、程序、執行緒之間的區別

 

        任務(task)是最抽象的,是一個一般性的術語,指由軟體完成的一個活動。一個任務既可以是一個程序,也可以是一個執行緒。簡而言之,它指的是一系列共同達到某一目的的操作。例如,讀取資料並將資料放入記憶體中。這個任務可以作為一個程序來實現,也可以作為一個執行緒(或作為一箇中斷任務)來實現。   程序(process)常常被定義為程式的執行。可以把一個程序看成是一個獨立的程式,在記憶體中有其完備的資料空間和程式碼空間。一個程序所擁有的資料和變數只屬於它自己。   執行緒(tread)則是某一程序中一路單獨執行的程式。也就是說,執行緒存在於程序之中。一個程序由一個或多個執行緒構成,各執行緒共享相同的程式碼和全域性資料,但各有其自己的堆疊。由於堆疊是每個執行緒一個,所以區域性變數對每一執行緒來說是私有的。由於所有執行緒共享同樣的程式碼和全域性資料,它們比程序更緊密,比單獨的程序間更趨向於相互作用,執行緒間的相互作用更容易些,因為它們本身就有某些供通訊用的共享記憶體:程序的全域性資料。   一個程序和一個執行緒最顯著的區別是:執行緒有自己的全域性資料。執行緒存在於程序中,因此一個程序的全域性變數由所有的執行緒共享。由於執行緒共享同樣的系統區域,
作業系統
分配給一個程序的資源對該程序的所有執行緒都是可用的,正如全域性資料可供所有執行緒使用一樣   程序概念    程序是表示資源分配的基本單位,又是排程執行的基本單位。例如,使用者執行自己的程式,系統就建立一個程序,併為它分配資源,包括各種表格、記憶體空間、磁碟空間、I/O裝置等。然後,把該程序放人程序的就緒佇列。程序排程程式選中它,為它分配CPU以及其它有關資源,該程序才真正執行。所以,程序是系統中的併發執行的單位。    在Mac、Windows NT等採用微核心結構的作業系統中,程序的功能發生了變化:它只是資源分配的單位,而不再是排程執行的單位。在微核心系統中,真正排程執行的基本單位是執行緒。因此,實現併發功能的單位是執行緒。 執行緒概念    執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。如果把程序理解為在邏輯上作業系統所完成的任務,那麼執行緒表示完成該任務的許多可能的子任務之一。例如,假設使用者啟動了一個視窗中的
資料庫
應用程式,作業系統就將對資料庫的呼叫表示為一個程序。假設使用者要從資料庫中產生一份工資單報表,並傳到一個檔案中,這是一個子任務;在產生工資單報表的過程中,使用者又可以輸人資料庫查詢請求,這又是一個子任務。這樣,作業系統則把每一個請求――工資單報表和新輸人的資料查詢表示為資料庫程序中的獨立的執行緒。執行緒可以在處理器上獨立排程執行,這樣,在多處理器環境下就允許幾個執行緒各自在單獨處理器上進行。作業系統提供執行緒就是為了方便而有效地實現這種併發性  引入執行緒的好處  (1)易於排程。  (2)提高併發性。通過執行緒可方便有效地 實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。  (3)開銷少。建立執行緒比建立程序要快,所需開銷很少。。  (4)利於充分發揮多處理器的功能。通過建立多執行緒程序(即一個程序可具有兩個或更多個執行緒),每個執行緒在一個處理器上執行,從而實現應用程式的併發性,使每個處理器都得到充分執行。  程序和執行緒的關係  (1)一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。  (2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。  (3)處理機分給執行緒,即真正在處理機上執行的是執行緒。  (4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。