線程和進程的聯繫和區別

進程概念html

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

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

線程概念併發

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

引入線程的好處性能

(1)易於調度。操作系統

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

(3)開銷少。建立線程比建立進程要快,所需開銷不多。。設計

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

進程和線程的關係

(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環境的設置。而線程切換隻須保存和設置少許寄存器的內容,並 不涉及存儲器管理方面的操做。可見,進程切換的開銷也遠大於線程切換的開銷。此外,因爲同一進程中的多個線程具備相同的地址空間,導致它們之間的同步和通訊的實現,也變得比較容易。在有的系統中,線程的切換、同步和通訊都無須

 

引用來自https://www.cnblogs.com/losing-1216/p/5083097.html

相關文章
相關標籤/搜索