徹底搞清楚進程和線程的十條區別

進程和線程的十條區別

我們先來說說引入線程這個概念的好處

我們說爲什麼有了進程,還要有線程呢???

進程可以使多個程序併發執行,以提高資源的利用率和系統的吞吐量。 但是:進程在同一時間只能做一件事。
進程在執行的過程中如果阻塞,整個進程就會掛起,即使進程中有些工作不依賴於等待的資源,仍然不會執行。
因此,操作系統引入了比進程粒度更小的線程,作爲併發執行的基本單位,從而減少併發執行時所付出的時空開銷,提高併發性。

從以下幾個方面,闡述線程的優勢:

從佔用資源上講
線程是一種非常節儉的多任務操作方式。在linux系統下,啓動一個新的進程必須分配給它獨立的地址空間,建立衆多的數據表來維護它 的代碼段,堆棧段和數據段,這是一種非常昂貴的多任務工作方式。

從通信機制上來看
線程間有方便的通信機制。對不同進程來說,它們具有獨立的數據空間。
要進行數據的傳遞只能通過進程間通信的方式進行,這種方式不僅費時間還不方便。線程則不然,由於同一進程下的線程之間共享相同空間,所以一個線程的數據可以直接被其他線程所用。不僅速度快還便捷。

從切換效率上來講
線程之間彼此切換所需時間遠遠小於進程間所需要的時間,一個進程的開銷大約是一個線程的30倍左右。

除了以上三方面,多線程作爲一種多任務,併發的工作方式,還有如下優點:

1 使用CPU系統更加有效。操作系統會保證當線程數不大於CPU數目時候,不同的線程運行於不同的CPU上。
2 改善程序結構,一個既長又複雜的進程可以考慮爲多個線程,成爲幾個獨立或半獨立的 運行部分,這樣的程序纔會利於理解和修改。

這裏我們可以具體的講一講進程和線程的區別了

進程

1 進程是CPU資源分配的最小單位。

2 進程有獨立的系統資源。擁有獨立的內存單元。

3 一個進程崩潰,不會影響其他進程。

4 進程在創建,切換和銷燬時候開銷比較大。進程創建的時候需要分配系統資源( 內存空間,I/O設備 )。而銷燬的時候需要釋放系統資源。

5 進程切換 涉及到整個當前進程CPU環境的保存以及新被調度運行的進程的CPU環境的設置。
需要兩步:第一步:切換頁目錄,刷新TLB以使用新的地址空間。第二步:切換內核棧和硬件上下文(寄存器)。

6 進程間通信比較複雜。進程間通信IPC

7 一個進程可以有無數個線程。

8 進程編程調試簡單可靠性高,但是創建銷燬開銷大。
9 進程間不會相互影響。
10 進程適用於多核,多機分佈。

線程:

1 線程是CPU調度的最小單位。

2 同一進程內的 線程 共享進程的大部分系統資源,包括堆,代碼段,數據段。每個線程只獨立擁有一些在運行中必不可少的私有屬性,比如tcb,
線程id,棧,寄存器, 每個線程擁有還自己的棧段,棧段又叫運行時段,用來存放所有局部變量臨時變量

3 一個線程崩潰,會讓同一進程內的線程也死掉。

4 進程在創建,切換和銷燬時候開銷比較小。線程切換隻保存和設置少量寄存器的內容,不涉及存儲器管理。

5 同一進程間的線程間邏輯地址空間是一樣的,不需要切換頁目錄,刷新TLB。

6 因爲線程間通信比較容易,因爲它們具有相同的地址空間,共享代碼段和數據段。它們之間的同步和通信變得比較容易。線程間可以直接讀寫進程數據段(如全局變量)來進行通信———需要進程同步和互斥手段的輔助,以保證數據的一致性。在有的系統中,線程的切換,同步和通信都無需操作系統內核的干預。

7 一個線程只屬於一個進程。
8 線程創建開銷小,切換速度快,但是編程調試相對複雜。
9 一個線程掛掉,導致整個進程掛掉。
10 線程適於多核。

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