進程和線程的聯繫和區別

定義:

一、進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。
二、線程是進程的一個實體,是CPU調度和分派的基本單位,他是比進程更小的能獨立運行的基本單位,線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),一個線程可以創建和撤銷另一個線程;


進程和線程的關係:
(1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。
(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。
(3)線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
(4)處理機分給線程,即真正在處理機上運行的是線程。
(5)線程是指進程內的一個執行單元,也是進程內的可調度實體。
線程與進程的區別:
(1)調度:線程作爲調度和分配的基本單位,進程作爲擁有資源的基本單位。
(2)併發性:不僅進程之間可以併發執行,同一個進程的多個線程之間也可以併發執行。
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源。
(4)系統開銷:在創建或撤銷進程的時候,由於系統都要爲之分配和回收資源,導致系統的明顯大於創建或撤銷線程時的開銷。但進程有獨立的地址空間,進程崩潰後,在保護模式下不會對其他的進程產生影響,而線程只是一個進程中的不同的執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但是在進程切換時,耗費的資源較大,效率要差些。


線程的劃分尺度小於進程,使得多線程程序的併發性高。


另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大的提高了程序運行效率。


線程在執行過程中,每個獨立的線程有一個程序運行的入口,順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,有應用程序提供多個線程執行控制。


從邏輯角度看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。


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

進程概念

  進程是表示資源分配的基本單位,又是調度運行的基本單位。例如,用戶運行自己的程序,系統就創建一個進程,併爲它分配資源,包括各種表格、內存空間、磁盤空間、I/O設備等。然後,把該進程放人進程的就緒隊列。進程調度程序選中它,爲它分配CPU以及其它有關資源,該進程才真正運行。所以,進程是系統中的併發執行的單位。

在Mac、Windows NT等採用微內核結構的操作系統中,進程的功能發生了變化:它只是資源分配的單位,而不再是調度運行的單位。在微內核系統中,真正調度運行的基本單位是線程。因此,實現併發功能的單位是線程。

線程概念

  線程是進程中執行運算的最小單位,亦即執行處理機調度的基本單位。如果把進程理解爲在邏輯上操作系統所完成的任務,那麼線程表示完成該任務的許多可能的子任務之一。例如,假設用戶啓動了一個窗口中的數據庫應用程序,操作系統就將對數據庫的調用表示爲一個進程。假設用戶要從數據庫中產生一份工資單報表,並傳到一個文件中,這是一個子任務;在產生工資單報表的過程中,用戶又可以輸人數據庫查詢請求,這又是一個子任務。這樣,操作系統則把每一個請求――工資單報表和新輸人的數據查詢表示爲數據庫進程中的獨立的線程。線程可以在處理器上獨立調度執行,這樣,在多處理器環境下就允許幾個線程各自在單獨處理器上進行。操作系統提供線程就是爲了方便而有效地實現這種併發性

引入線程的好處

(1)易於調度。

(2)提高併發性。通過線程可方便有效地實現併發性。進程可創建多個線程來執行同一程序的不同部分。

(3)開銷少。創建線程比創建進程要快,所需開銷很少。。

(4)利於充分發揮多處理器的功能。通過創建多線程進程(即一個進程可具有兩個或更多個線程),每個線程在一個處理器上運行,從而實現應用程序的併發性,使每個處理器都得到充分運行。

進程和線程的關係

(1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。線程是操作系統可識別的最小執行和調度單位。

(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。 同一進程中的多個線程共享代碼段(代碼和常量),數據段(全局變量和靜態變量),擴展段(堆存儲)。但是每個線程擁有自己的棧段,棧段又叫運行時段,用來存放所有局部變量和臨時變量。

(3)處理機分給線程,即真正在處理機上運行的是線程。

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

 

處理機管理是操作系統的基本管理功能之一,它所關心的是處理機的分配問題。也就是說把CPU(中央處理機)的使用權分給某個程序,通常把這個正準備進入內存的程序稱爲作業,當這個作業進入內存後我們把它稱爲進程。

自從60年代提出進程概念,在操作系統中一直都是以進程作爲能獨立運行的基本單位的。直到80年代中期,人們又提出了比進程更小的能獨立運行的基本單位 ——線程;試圖用它來提高系統內程序併發執行的速度,從而可進一步提高系統的吞吐量。近幾年,線程概念已得到了廣泛應用,不僅在新推出的操作系統中,大多 都已引入了線程概念,而且在新推出的數據庫管理系統和其它應用軟件中,也都紛紛引入了線程,來改善系統的性能。

如果說,在操作系統中引入進程的目的,是爲了使多個程序併發執行,以改善資源利用率及提高系統的吞吐量;那麼,在操作系統中再引入線程則是爲了減少程序並 發執行時所付出的時空開銷,使操作系統具有更好的併發性。爲了說明這一點,我們首先回顧進程的兩個基本屬性:

(1)進程是一個可擁有資源的獨立單位;

(2)進程同時又是——個可以獨立調度和分派的基本單位。正是由於進程具有這兩個基本屬性,才使之成爲一個能獨立運行的基本單位,從而也就構成了進程併發執行的基礎。

然而爲使程序能併發執行,系統還必須進行以下的一系列操作:

(1)創建進程。系統在創建進程時,必須爲之分配其所必需的、除處理機以外的所有資源。如內存空間、I/0設備以及建立相應的PCB。

(2)撤消進程。系統在撤消進程時,又必須先對這些資源進行回收操作,然後再撤消PCB。

(3)進程切換。在對進程進行切換時,由於要保留當前進程的CPU環境和設置新選中進程的CPU環境,爲此需花費不少處理機時間。

簡言之,由於進程是一個資源擁有者,因而在進程的創建、撤消和切換中,系統必須爲之付出較大的時空開銷。也正因爲如此,在系統中所設置的進程數目不宜過多,進程切換的頻率也不宜太高,但這也就限制了併發程度的進一步提高。

如何能使多個程序更好地併發執行,同時又儘量減少系統的開銷,已成爲近年來設計操作系統時所追求的重要目標。於是,有不少操作系統的學者們想到,可否將進 程的上述屬性分開,由操作系統分開來進行處理。即對作爲調度和分派的基本單位,不同時作爲獨立分配資源的單位,以使之輕裝運行;而對擁有資源的基本單位, 又不頻繁地對之進行切換。正是在這種思想的指導下,產生了線程概念。

在引入線程的操作系統中,線程是進程中的一個實體,是被系統獨立調度和分派的基本單位。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源 (如程序計數器、一組寄存器和棧),但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程;同一進程中的多個線程 之間可以併發執行。由於線程之間的相互制約,致使線程在運行中也呈現出間斷性。相應地,線程也同樣有就緒、阻塞和執行三種基本狀態,有的系統中線程還有終 止狀態。

線程與進程的比較

線程具有許多傳統進程所具有的特徵,故又稱爲輕型進程(Light—Weight Process)或進程元;而把傳統的進程稱爲重型進程(Heavy—Weight Process),它相當於只有一個線程的任務。在引入了線程的操作系統中,通常一個進程都有若干個線程,至少需要一個線程。下面,我們從調度、併發性、 系統開銷、擁有資源等方面,來比較線程與進程。

1.調度

在傳統的操作系統中,擁有資源的基本單位和獨立調度、分派的基本單位都是進程。而在引入線程的操作系統中,則把線程作爲調度和分派的基本單位。而把進程作 爲資源擁有的基本單位,使傳統進程的兩個屬性分開,線程便能輕裝運行,從而可顯著地提高系統的併發程度。在同一進程中,線程的切換不會引起進程的切換,在 由一個進程中的線程切換到另一個進程中的線程時,將會引起進程的切換。

2.併發性

在引入線程的操作系統中,不僅進程之間可以併發執行,而且在一個進程中的多個線程之間,亦可併發執行,因而使操作系統具有更好的併發性,從而能更有效地使 用系統資源和提高系統吞吐量。例如,在一個未引入線程的單CPU操作系統中,若僅設置一個文件服務進程,當它由於某種原因而被阻塞時,便沒有其它的文件服 務進程來提供服務。在引入了線程的操作系統中,可以在一個文件服務進程中,設置多個服務線程,當第一個線程等待時,文件服務進程中的第二個線程可以繼續運 行;當第二個線程阻塞時,第三個線程可以繼續執行,從而顯著地提高了文件服務的質量以及系統吞吐量。

3.擁有資源

不論是傳統的操作系統,還是設有線程的操作系統,進程都是擁有資源的一個獨立單位,它可以擁有自己的資源。一般地說,線程自己不擁有系統資源(也有一點必 不可少的資源),但它可以訪問其隸屬進程的資源。亦即,一個進程的代碼段、數據段以及系統資源,如已打開的文件、I/O設備等,可供問一進程的其它所有線 程共享。

4.系統開銷

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章