線程與進程有不少相似的性質,所以人們習慣上也稱線程爲輕量級進程( lightweight併發
process, LWP),也是CPU調度和分派的基本單元;而傳統意義上的進程則被稱爲重量級進操作系統
程(heavyweight process, HWP),從現代的角度來看,它就是隻擁有一個線程的進程。如線程
果進程有多個控制線程,那麼它就能同時執行多個任務。他們之間的關係能夠簡單的由下圖表示:blog
圖2.1 進程與線程的區別進程
下面,咱們主要從調度、併發性、系統開銷、擁有資源等方面來對線程和進程進行比較。內存
調度資源
在傳統的操做系統中,CPU調度和分派的基本單位是進程。而在引入線程的操做系統中,則同步
把線程做爲CPU調度和分派的基本單位,進程則做爲資源擁有的基本單位,從而使傳統進程im
的兩個屬性分開,線程便能輕裝運行,這樣能夠顯著地提升系統的併發性。同一進程中線程通信
的切換不會引發進程切換,從而避免了昂貴的系統調用。可是在由一個進程中的線程切換到
另外一進程中的線程時,依然會引發進程切換。
併發性
在引入線程的操做系統中,不只進程之間能夠併發執行,並且在一個進程中的多個線程之間
也能夠併發執行,於是使操做系統具備更好的併發性,從而能更有效地使用系統資源和提升
系統的吞吐量。例如,在一個未引入線程的單CPU操做系統中,若僅設置一個文件服務進程,
當它因爲某種緣由被封鎖時,便沒有其餘的文件服務進程來提供服務。在引入了線程的操做
系統中,能夠在一個文件服務進程中設置多個服務線程。當第一個線程等待時,文件服務進
程中的第二個線程能夠繼續運行;當第二個線程封鎖時,第三個線程能夠繼續執行,從而顯
著地提升了文件服務的質量以及系統的吞吐量。
系統開銷
不管是引入了線程的操做系統,仍是傳統的操做系統,進程都是擁有系統資源的一個獨立單
位,它能夠擁有本身的資源。通常地說,線程本身不擁有系統資源(也有一點必不可少的資
源),但它能夠訪問其隸屬進程的資源。亦即一個進程的代碼段、數據段以及系統資源(如
已打開的文件、I/O設備等),可供同一進程的其餘全部線程共享。
擁有資源
因爲在建立或撤消進程時,系統都要爲之分配或回收資源,如內存空間、I/O設備等。所以,
操做系統所付出的開銷將顯著地大於在建立或撤消線程時的開銷。相似地,在進行進程切換
時,涉及到整個當前進程CPU環境的保存環境的設置以及新被調度運行的進程的CPU環境的
設置。而線程切換隻需保存和設置少許寄存器的內容,並不涉及存儲器管理方面的操做。可
見,進程切換的開銷也遠大於線程切換的開銷。此外,因爲同一進程中的多個線程具備相同
的地址空間,導致它們之間的同步和通訊的實現也變得比較容易。在有的系統中,線程的切
換、同步和通訊都無需操做系統內核的干預。