進程和線程的定義、區別與聯繫

1、進程

進程:指在系統中能獨立運行並做爲資源分配的基本單位,它是由一組機器指令、數據和堆棧等組成的,是一個能獨立運行的活動實體。

    注意,進程通常有三個狀態:就緒狀態、執行狀態和等待狀態【或稱阻塞狀態】;進程只能由父進程創建,系統中全部的進程造成一種進程樹的層次體系;掛起命令可由進程本身和其餘進程發出,可是解除掛起命令只能由其餘進程發出。

編程

進程控制塊(PCB):PCB不但能夠記錄進程的屬性信息,以便操做系統對進程進行控制和管理,並且PCB標誌着進程的存在,操做系統根據系統中是否有該進程的進程控制塊PCB而知道該進程存在與否。系統創建進程的同時就創建該進程的PCB,在撤銷一個進程時,也就撤銷其PCB,故進程的PCB對進程來講是它存在的具體的物理標誌和體現。通常PCB包括如下三類信息:進程標識信息;處理器狀態信息;進程控制信息。多線程

    由程序段、相關的數據段和PCB三部分構成了進程實體(又稱進程印像),通常,咱們把進程實體就簡稱爲進程。

進程的特徵:
1.動態性:進程的實質是程序的一次執行過程,進程是動態產生,動態消亡的。
2.併發性:任何進程均可以同其餘進程一塊兒併發執行。
3.獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位。
4.異步性:因爲進程間的相互制約,使進程具備執行的間斷性,即進程按各自獨立的、不可預知的速度向前推動。


2、線程


線程:線程是進程中的一個實體,做爲系統調度和分派的基本單位。Linux下的線程看做輕量級進程。


線程的性質:
1.線程是進程內的一個相對獨立的可執行的單元。若把進程稱爲任務的話,那麼線程則是應用中的一個子任務的執行。
2.因爲線程是被調度的基本單元,而進程不是調度單元。因此,每一個進程在建立時,至少須要同時爲該進程建立一個線程。即進程中至少要有一個或一個以上的線程,不然該進程沒法被調度執行。
3.進程是被分給並擁有資源的基本單元。同一進程內的多個線程共享該進程的資源,但線程並不擁有資源,只是使用他們。
4.線程是操做系統中基本調度單元,所以線程中應包含有調度所須要的必要信息,且在生命週期中有狀態的變化。
5.因爲共享資源【包括數據和文件】,因此線程間須要通訊和同步機制,且須要時線程能夠建立其餘線程,但線程間不存在父子關係。


多線程使用的情形:前臺和後臺工做狀況;異步處理工做狀況;須要加快執行速度狀況;組織複雜工做的狀況;同時有多個用戶服務請求的狀況等。
 
線程機制的優勢:
多線程運行在同一個進程的相同的地址空間內,和採用多進程相比有如下優勢:
1.建立和撤銷線程的開銷較之進程要少。建立線程時只須要創建線程控制表相應的表目,或有關隊列,而建立進程時,要建立PCB表和初始化,進入有關進程隊列,創建它的地址空間和所需資源等。
2.CPU在線程之間開關時的開銷遠比進程要少得多。因開關線程都在同一地址空間內,只須要修改線程控制表或隊列,不涉及地址空間和其餘工做。
3.線程機制也增長了通信的有效性。進程間的通信每每要求內核的參與,以提供通信機制和保護機制,而線程間的通信是在同一進程的地址空間內,共享主存和文件,無需內核參與。


3、進程和線程的區別


(1)調度:
        在傳統的操做系統中,CPU調度和分派的基本單位是進程。而在引入線程的操做系統中,則把線程做爲CPU調度和分派的基本單位,進程則做爲資源擁有的基本單位,從而使傳統進程的兩個屬性分開,線程編程輕裝運行,這樣能夠顯著地提升系統的併發性。同一進程中線程的切換不會引發進程切換,從而避免了昂貴的系統調用,可是在由一個進程中的線程切換到另外一進程中的線程,依然會引發進程切換。
 
(2)併發性:
      在引入線程的操做系統中,不只進程之間能夠併發執行,並且在一個進程中的多個線程之間也能夠併發執行,於是使操做系統具備更好的併發性,從而更有效地提升系統資源和系統的吞吐量。例如,在一個爲引入線程的單CPU操做系統中,若僅設置一個文件服務進程,當它因爲某種緣由被封鎖時,便沒有其餘的文件服務進程來提供服務。在引入線程的操做系統中,能夠在一個文件服務進程設置多個服務線程。當第一個線程等待時,文件服務進程中的第二個線程能夠繼續運行;當第二個線程封鎖時,第三個線程能夠繼續執行,從而顯著地提升了文件服務的質量以及系統的吞吐量。


(3)擁有資源:
      不管是引入了線程的操做系統,仍是傳統的操做系統,進程都是擁有系統資源的一個獨立單位,他能夠擁有本身的資源。通常地說,線程本身不能擁有資源(也有一點必不可少的資源),但它能夠訪問其隸屬進程的資源,亦即一個進程的代碼段、數據段以及系統資源(如已打開的文件、I/O設備等),可供同一個進程的其餘全部線程共享。


(4)獨立性:
        在同一進程中的不一樣線程之間的獨立性要比不一樣進程之間的獨立性低得多。這是由於併發

爲防止進程之間彼此干擾和破壞,每一個進程都擁有一個獨立的地址空間和其它資源,除了共享全局變量外,不容許其它進程的訪問。可是同一進程中的不一樣線程每每是爲了提升併發性以及進行相互之間的合做而建立的,它們共享進程的內存地址空間和資源,如每一個線程均可以訪問它們所屬進程地址空間中的全部地址,如一個線程的堆棧能夠被其它線程讀、寫,甚至徹底清除。異步

 

(5)系統開銷:高併發

       因爲在建立或撤銷進程時,系統都要爲之分配或回收資源,如內存空間、I/O設備等。所以,操做系統爲此所付出的開銷將顯著地大於在建立或撤消線程時的開銷。相似的,在進程切換時,涉及到整個當前進程CPU環境的保存環境的設置以及新被調度運行的CPU環境的設置,而線程切換隻需保存和設置少許的寄存器的內容,並不涉及存儲器管理方面的操做,可見,進程切換的開銷也遠大於線程切換的開銷。此外,因爲同一進程中的多個線程具備相同的地址空間,導致他們之間的同步和通訊的實現也變得比較容易。在有的系統中,現成的切換、同步、和通訊都無需操做系統內核的干預。操作系統

 

(6)支持多處理機系統:
       在多處理機系統中,對於傳統的進程,即單線程進程,無論有多少處理機,該進程只能運行在一個處理機上。但對於多線程進程,就能夠將一個進程中的多個線程分配到多個處理機上,使它們並行執行,這無疑將加速進程的完成。所以,現代處理機OS都無一例外地引入了多線程。線程

相關文章
相關標籤/搜索