淺談線程和進程的區別

進程和線程是什麼?

首先你要理解cpu的概念,計算機上的所有操作都是由cpu來執行的,cpu將要執行的操作分爲一個個的任務,這些任務我們就可以理解爲進程,而這些任務又分爲一些細粒度更小的子任務,這些子任務就稱作線程

cpu輪流執行任務的,每一個任務需要經過以下三個階段:

  • 加載上下文
  • 執行
  • 保存上下文

也就是說,每一個進程從加載、執行,到切換下一個進程執行,都會經歷同樣的一個過程,我們的cpu就是在無時無刻地進行這樣的進程切換操作

而我們又可以把進程分爲一些細粒度更小的線程,這些線程之間也可以來回的切換,就像進程一樣,但是卻不需要加載和保存上下文的操作,因爲這些線程都是共享上下文的

進程與線程區別

這裏爲大家簡單總結了一些進程和線程的區別,如有錯誤歡迎指正:

  • 性質不同:進程是資源分配的基本單位,線程是cpu執行運算和調度的基本單位
  • 歸屬不同:一個操作系統中可以有很多進程,一個進程可以有很多線程
  • 開銷不同:進程創建、銷燬和切換的開銷都要遠大於線程
  • 擁有資源不同:每個進程都擁有自己的內存和資源,一個進程中的線程會共享這些內存和資源
  • 通信方式不同:進程之間可以通過管道、消息隊列、共享內存、信號量,以及Socket等機制實現通信,線程之間主要通過共享變量及其變種形式實現通信
  • 控制和影響能力不同:子進程無法控制父進程,一個進程發生異常時一般不會影響其他進程;子線程可以控制父線程,如果主線程發生異常,會影響其所在進程和其餘線程
  • 擴展能力不同:多進程可以方便地擴展到多機分佈式系統上,多線程想要擴展到多臺機器上就很困難
  • cpu利用率不同:進程的cpu利用率低,因爲需要額外的上下文切換開銷;線程的cpu利用率高,因爲切換簡單
  • 可靠性不同:進程的可靠性要高於線程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章