什麼是進程
進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計數器的值和處理寄存器的內容來表示。
什麼是線程
線程,有時被稱爲輕量級進程(Lightweight Process,LWP),是程序執行流的最小單元。線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以併發執行。線程是程序中一個單一的順序控制流程。進程內一個相對獨立的、可調度的執行單元,是系統獨立調度和分派CPU的基本單位指運行中的程序的調度單位。在單個程序中同時運行多個線程完成不同的工作,稱爲多線程。
兩者間的區別
1.調度:
線程作爲調度和分配的基本單位,進程作爲擁有資源的基本單位 。
2.併發性:
不僅進程之間可以併發執行,同一個進程的多個線程之間也可併發執行 。
3.擁有資源:
進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源.
4.系統開銷:
在創建或撤消進程時,由於系統都要爲之分配和回收資源,導致系統的開銷明顯大於創建或撤消線程時的開銷。
兩者如何選擇
1.需要頻繁創建銷燬的優先用線程
這種原則最常見的應用就是Web服務器了,來一個連接建立一個線程,斷了就銷燬線程,要是用進程,創建和銷燬的代價是很難承受的。
2.需要進行大量計算的優先使用線程
所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下線程是最合適的。這種原則最常見的是圖像處理、算法處理。
3.強相關的處理用線程,弱相關的處理用進程
什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。一般的Server需 要完成如下任務:消息收發、消息處理。“消息收發”和“消息處理”就是弱相關的任務,而“消息處理”裏面可能又分爲“消息解碼”,“業務處理”,這兩個任 務相對來說相關性就要強多了。因此“消息收發”和“消息處理”可以分進程設計,“消息解碼”,“業務處理”可以分線程設計。當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。
4.可能要擴展到多機分佈的用進程,多核分佈的用線程
5.都滿足需求的情況下,用你最熟悉、最拿手的方式