【併發】線程與進程的區別

線程與進程有不少相似的性質,所以人們習慣上也稱線程爲輕量級進程( lightweight併發

process, LWP),也是CPU調度和分派的基本單元;而傳統意義上的進程則被稱爲重量級進操作系統

程(heavyweight process, HWP),從現代的角度來看,它就是隻擁有一個線程的進程。如線程

果進程有多個控制線程,那麼它就能同時執行多個任務。他們之間的關係能夠簡單的由下圖表示:blog

              圖2.1 進程與線程的區別進程

下面,咱們主要從調度、併發性、系統開銷、擁有資源等方面來對線程和進程進行比較。內存

 

調度資源

在傳統的操做系統中,CPU調度和分派的基本單位是進程。而在引入線程的操做系統中,則同步

把線程做爲CPU調度和分派的基本單位,進程則做爲資源擁有的基本單位,從而使傳統進程im

的兩個屬性分開,線程便能輕裝運行,這樣能夠顯著地提升系統的併發性。同一進程中線程通信

的切換不會引發進程切換,從而避免了昂貴的系統調用。可是在由一個進程中的線程切換到

另外一進程中的線程時,依然會引發進程切換。

併發性

在引入線程的操做系統中,不只進程之間能夠併發執行,並且在一個進程中的多個線程之間

也能夠併發執行,於是使操做系統具備更好的併發性,從而能更有效地使用系統資源和提升

系統的吞吐量。例如,在一個未引入線程的單CPU操做系統中,若僅設置一個文件服務進程,

當它因爲某種緣由被封鎖時,便沒有其餘的文件服務進程來提供服務。在引入了線程的操做

系統中,能夠在一個文件服務進程中設置多個服務線程。當第一個線程等待時,文件服務進

程中的第二個線程能夠繼續運行;當第二個線程封鎖時,第三個線程能夠繼續執行,從而顯

著地提升了文件服務的質量以及系統的吞吐量。

系統開銷

不管是引入了線程的操做系統,仍是傳統的操做系統,進程都是擁有系統資源的一個獨立單

位,它能夠擁有本身的資源。通常地說,線程本身不擁有系統資源(也有一點必不可少的資

源),但它能夠訪問其隸屬進程的資源。亦即一個進程的代碼段、數據段以及系統資源(如

已打開的文件、I/O設備等),可供同一進程的其餘全部線程共享。

擁有資源

因爲在建立或撤消進程時,系統都要爲之分配或回收資源,如內存空間、I/O設備等。所以,

操做系統所付出的開銷將顯著地大於在建立或撤消線程時的開銷。相似地,在進行進程切換

時,涉及到整個當前進程CPU環境的保存環境的設置以及新被調度運行的進程的CPU環境的

設置。而線程切換隻需保存和設置少許寄存器的內容,並不涉及存儲器管理方面的操做。可

見,進程切換的開銷也遠大於線程切換的開銷。此外,因爲同一進程中的多個線程具備相同

的地址空間,導致它們之間的同步和通訊的實現也變得比較容易。在有的系統中,線程的切

換、同步和通訊都無需操做系統內核的干預。

相關文章
相關標籤/搜索