進程與線程的概念,區別和聯繫

對於進程和線程的概念,區別和聯繫一直似懂非懂,模棱兩可。今天,翻閱資料,進行了系統性的學習和整理。
進程與線程的一個簡單解釋(-_-)這篇博客非常形象的解釋了進程和線程之間的關係。

進程概念

  進程是表示資源分配的基本單位,又是調度運行的基本單位。例如,用戶運行自己的程序,系統就創建一個進程,併爲它分配資源,包括各種表格、內存空間、磁盤空間、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環境的設置。而線程切換隻須保存和設置少量寄存器的內容,並 不涉及存儲器管理方面的操作。可見,進程切換的開銷也遠大於線程切換的開銷。此外,由於同一進程中的多個線程具有相同的地址空間,致使它們之間的同步和通信的實現,也變得比較容易。在有的系統中,線程的切換、同步和通信都無須

總的來說,線程就是建立在進程上的一次程序運行單位,而進程雖然包含程序,但它的作用不是去執行程序,而是負責資源分配。

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