進程和線程主要區別與定義

抽象理解

在這裏插入圖片描述
直接上圖,CPU是工廠、電力資源是cpu 時間片、進程是車間、線程是車間工人

操作系統的資源分配與調度邏輯

  • 以多進程形式,允許多個任務同時運行;
  • 以多線程形式,允許單個任務分成不同的部分運行;
  • 提供協調機制,一方面防止進程之間和線程之間產生衝突,另一方面允許進程之間和線程之間共享資源。

科學理解

進程

進程是程序的一次執行過程,是一個動態概念,是程序在執行過程中分配和管理資源的基本單位,每一個進程都有一個自己的地址空間,至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。

線程

線程是CPU調度和分派的基本單位,它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。

進程和線程的關係

線程是進程的一部分
一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程

舉例分析

CPU太快,太快,太快了,寄存器僅僅能夠追的上他的腳步,RAM和別的掛在各總線上的設備完全是望其項背。那當多個任務要執行的時候怎麼辦呢?在CPU看來就是輪流着來

具體的輪流方法就是:先加載程序A的上下文,然後開始執行A,保存程序A的上下文,調入下一個要執行的程序B的程序上下文,然後開始執行B,保存程序B的上下文。
進程就是包換上下文切換的程序執行時間總和 = CPU加載上下文+CPU執行+CPU保存上下文
進程的顆粒度太大,每次都要有上下的調入,保存,調出。
程序A,實際分成 a,b,c等多個塊組合而成。
程序A得到CPU =》CPU加載上下文,開始執行程序A的a小段,然後執行A的b小段,然後再執行A的c小段,最後CPU保存A的上下文

這裏a,b,c的執行是共享了A的上下文,CPU在執行的時候沒有進行上下文切換的。
這裏的a,b,c就是線程,也就是說線程是共享了進程的上下文環境,的更爲細小的CPU時間段。

進程和線程區別

  1. 本質線程程序執行的最小單位,而進程是操作系統分配資源的最小單位
  2. 在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
  3. 進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間(包括代碼段,數據集,堆等)及一些進程級的資源(如打開文件和信號等),某進程內的線程在其他進程不可見;
  4. 包含關係線程是進程的一部分,所以線程也被稱爲輕權進程或者輕量級進程。
  5. 內存分配系統爲每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源

爲何不使用多進程而是使用多線程

線程廉價,線程啓動比較快,退出比較快,對系統資源的衝擊也比較小。而且線程彼此分享了大部分核心對象(File Handle)的擁有權如果使用多重進程,但是不可預期,且測試困難。

參考:
https://blog.csdn.net/luhao19980909/article/details/89403233
https://www.zhihu.com/question/25532384

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