進程和線程是什麼?
首先你要理解cpu的概念,計算機上的全部操做都是由cpu來執行的,cpu將要執行的操做分爲一個個的任務,這些任務咱們就能夠理解爲進程,而這些任務又分爲一些細粒度更小的子任務,這些子任務就稱做線程多線程
cpu輪流執行任務的,每個任務須要通過如下三個階段:分佈式
也就是說,每個進程從加載、執行,到切換下一個進程執行,都會經歷一樣的一個過程,咱們的cpu就是在無時無刻地進行這樣的進程切換操做操作系統
而咱們又能夠把進程分爲一些細粒度更小的線程,這些線程之間也能夠來回的切換,就像進程同樣,可是卻不須要加載和保存上下文的操做,由於這些線程都是共享上下文的線程
進程與線程的區別
這裏爲你們簡單總結了一些進程和線程的區別,若有錯誤歡迎指正:隊列
- 性質不一樣:進程是資源分配的基本單位,線程是cpu執行運算和調度的基本單位
- 歸屬不一樣:一個操做系統中能夠有不少進程,一個進程能夠有不少線程
- 開銷不一樣:進程建立、銷燬和切換的開銷都要遠大於線程
- 擁有資源不一樣:每一個進程都擁有本身的內存和資源,一個進程中的線程會共享這些內存和資源
- 通訊方式不一樣:進程之間能夠經過管道、消息隊列、共享內存、信號量,以及Socket等機制實現通訊,線程之間主要經過共享變量及其變種形式實現通訊
- 控制和影響能力不一樣:子進程沒法控制父進程,一個進程發生異常時通常不會影響其餘進程;子線程能夠控制父線程,若是主線程發生異常,會影響其所在進程和其他線程
- 擴展能力不一樣:多進程能夠方便地擴展到多機分佈式系統上,多線程想要擴展到多臺機器上就很困難
- cpu利用率不一樣:進程的cpu利用率低,由於須要額外的上下文切換開銷;線程的cpu利用率高,由於切換簡單
- 可靠性不一樣:進程的可靠性要高於線程