進程與線程的定義、關系及區別
一、進程的定義
進程:指在系統中能獨立運行並作為資源分配的基本單位,它是由一組機器指令、數據和堆棧等組成的,是一個能獨立運行的活動實體。
進程一般有三個狀態:就緒狀態、執行狀態和等待狀態【或稱阻塞狀態】;進程只能由父進程建立,系統中所有的進程形成一種進程樹的層次體系;掛起命令可由進程自己和其他進程發出,但是解除掛起命令只能由其他進程發出。
進程控制塊(PCB):PCB不但可以記錄進程的屬性信息,以便操作系統對進程進行控制和管理,而且PCB標志着進程的存在,操作系統根據系統中是否有該進程的進程控制塊PCB而知道該進程存在與否。系統建立進程的同時就建立該進程的PCB,在撤銷一個進程時,也就撤銷其PCB,故進程的PCB對進程來說是它存在的具體的物理標志和體現。一般PCB包括以下三類信息:進程標識信息;處理器狀態信息;進程控制信息。
由程序段、相關的數據段和PCB三部分構成了進程實體(又稱進程印像),一般,我們把進程實體就簡稱為進程。
進程的特征:
1.動態性:進程的實質是程序的一次執行過程,進程是動態產生,動態消亡的。
2.並發性:任何進程都可以同其他進程一起並發執行。
3.獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位。
4.異步性:由於進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進。
二、線程的定義
線程:線程是進程中的一個實體,作為系統調度和分派的基本單位。
線程的性質:
1.線程是進程內的一個相對獨立的可執行的單元。若把進程稱為任務的話,那么線程則是應用中的一個子任務的執行。
2.由於線程是被調度的基本單元,而進程不是調度單元。所以,每個進程在創建時,至少需要同時為該進程創建一個線程。即進程中至少要有一個或一個以上的線程,否則該進程無法被調度執行。
3.進程是被分給並擁有資源的基本單元。同一進程內的多個線程共享該進程的資源,但線程並不擁有資源,只是使用他們。
4.線程是操作系統中基本調度單元,因此線程中應包含有調度所需要的必要信息,且在生命周期中有狀態的變化。
5.由於共享資源【包括數據和文件】,所以線程間需要通信和同步機制,且需要時線程可以創建其他線程,但線程間不存在父子關系。
多線程使用的情形:
前台和后台工作情況;
異步處理工作情況;
需要加快執行速度情況;
組織復雜工作的情況;
同時有多個用戶服務請求的情況等。
線程機制的優點:
多線程運行在同一個進程的相同的地址空間內,和采用多進程相比有以下優點:
1.創建和撤銷線程的開銷較之進程要少。創建線程時只需要建立線程控制表相應的表目,或有關隊列,而創建進程時,要創建PCB表和初始化,進入有關進程隊列,建立它的地址空間和所需資源等。
2.CPU在線程之間開關時的開銷遠比進程要少得多。因開關線程都在同一地址空間內,只需要修改線程控制表或隊列,不涉及地址空間和其他工作。
3.線程機制也增加了通訊的有效性。進程間的通訊往往要求內核的參與,以提供通訊機制和保護機制,而線程間的通訊是在同一進程的地址空間內,共享主存和文件,無需內核參與。
三、進程與線程之間的關系
從一定意義上講,進程就是一個應用程序在處理機上的一次執行過程,它是一個動態的概念,而線程是進程中的一部分,進程包含多個線程在運行。
在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由於線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間並發執行的程度。
舉例說明:
進程:北京地鐵單位
線程:北京地鐵1號線、2號線、5號線........15號線
北京地鐵單位的所有地鐵線路共享着北京坐地鐵的所有客源(相當於進程中的資源,所以進程屬於資源單位),而各線路負責將客源輸送到指定地點(執行操作,所以線程屬於執行單位)。
在傳統的操作系統中,CPU調度和分派的基本單位是進程。而在引入線程的操作系統中,則把線程作為CPU調度和分派的基本單位,進程則作為資源擁有的基本單位,從而使傳統進程的兩個屬性分開,線程編程輕裝運行,這樣可以顯著地提高系統的並發性。同一進程中線程的切換不會引起進程切換,從而避免了昂貴的系統調用,但是在由一個進程中的線程切換到另一進程中的線程,依然會引起進程切換。
2、並發性:
在引入線程的操作系統中,不僅進程之間可以並發執行,而且在一個進程中的多個線程之間也可以並發執行,因而使操作系統具有更好的並發性,從而更有效地提高系統資源和系統的吞吐量。例如,在一個為引入線程的單CPU操作系統中,若僅設置一個文件服務進程,當它由於某種原因被封鎖時,便沒有其他的文件服務進程來提供服務。在引入線程的操作系統中,可以在一個文件服務進程設置多個服務線程。當第一個線程等待時,文件服務進程中的第二個線程可以繼續運行;當第二個線程封鎖時,第三個線程可以繼續執行,從而顯著地提高了文件服務的質量以及系統的吞吐量。
3、擁有資源:
不論是引入了線程的操作系統,還是傳統的操作系統,進程都是擁有系統資源的一個獨立單位,他可以擁有自己的資源。一般地說,線程自己不能擁有資源(也有一點必不可少的資源),但它可以訪問其隸屬進程的資源,亦即一個進程的代碼段、數據段以及系統資源(如已打開的文件、I/O設備等),可供同一個進程的其他所有線程共享。
4、獨立性:
在同一進程中的不同線程之間的獨立性要比不同進程之間的獨立性低得多。這是因為為了防止進程之間彼此干擾和破壞,每個進程都擁有一個獨立的地址空間和其它資源,除了共享全局變量外,不允許其它進程的訪問。但是同一進程中的不同線程往往是為了提高並發性以及進行相互之間的合作而創建的,它們共享進程的內存地址空間和資源,如每個線程都可以訪問它們所屬進程地址空間中的所有地址,如一個線程的堆棧可以被其它線程讀、寫,甚至完全清除。
5、系統開銷:
由於在創建或撤銷進程時,系統都要為之分配或回收資源,如內存空間、I/O設備等。因此,操作系統為此所付出的開銷將顯著地大於在創建或撤消線程時的開銷。在進程切換時,涉及到整個當前進程CPU環境的保存環境的設置以及新被調度運行的CPU環境的設置,而線程切換只需保存和設置少量的寄存器的內容,並不涉及存儲器管理方面的操作,可見,進程切換的開銷也遠大於線程切換的開銷。此外,由於同一進程中的多個線程具有相同的地址空間,致使他們之間的同步和通信的實現也變得比較容易。在有的系統中,現成的切換、同步、和通信都無需操作系統內核的干預。
6、支持多處理機系統:
在多處理機系統中,對於傳統的進程,即單線程進程,不管有多少處理機,該進程只能運行在一個處理機上。但對於多線程進程,就可以將一個進程中的多個線程分配到多個處理機上,使它們並行執行,這無疑將加速進程的完成。因此,現代處理機OS都無一例外地引入了多線程。
參考文檔:http://blog.csdn.net/yanxiaolx/article/details/51763372