進程和線程的差別

什麼是進程

進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計數器的值和處理寄存器的內容來表示。

什麼是線程

線程,有時被稱爲輕量級進程(Lightweight Process,LWP),是程序執行流的最小單元。線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以併發執行。線程是程序中一個單一的順序控制流程。進程內一個相對獨立的、可調度的執行單元,是系統獨立調度和分派CPU的基本單位指運行中的程序的調度單位。在單個程序中同時運行多個線程完成不同的工作,稱爲多線程。

兩者間的區別

1.調度:
線程作爲調度和分配的基本單位,進程作爲擁有資源的基本單位 。

2.併發性:
不僅進程之間可以併發執行,同一個進程的多個線程之間也可併發執行 。

3.擁有資源:
進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源.

4.系統開銷:
在創建或撤消進程時,由於系統都要爲之分配和回收資源,導致系統的開銷明顯大於創建或撤消線程時的開銷。

兩者如何選擇

1.需要頻繁創建銷燬的優先用線程
這種原則最常見的應用就是Web服務器了,來一個連接建立一個線程,斷了就銷燬線程,要是用進程,創建和銷燬的代價是很難承受的。

2.需要進行大量計算的優先使用線程
所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下線程是最合適的。這種原則最常見的是圖像處理、算法處理。

3.強相關的處理用線程,弱相關的處理用進程
什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。一般的Server需 要完成如下任務:消息收發、消息處理。“消息收發”和“消息處理”就是弱相關的任務,而“消息處理”裏面可能又分爲“消息解碼”,“業務處理”,這兩個任 務相對來說相關性就要強多了。因此“消息收發”和“消息處理”可以分進程設計,“消息解碼”,“業務處理”可以分線程設計。當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。

4.可能要擴展到多機分佈的用進程,多核分佈的用線程

5.都滿足需求的情況下,用你最熟悉、最拿手的方式

兩者之間的比較圖

這裏寫圖片描述

發佈了52 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章