進程與線程的定義和簡單比喻
首先簡單介紹一下進程與線程的定義。
進程
進程是并發執行的程序在執行過程中分配和管理資源的基本單位,是一個動態概念,競爭計算機系統資源的基本單位。
簡單的說,在手機或電腦開啟一個應用就算是打開一個進程,如下圖:打開一個WSP Office.exe,打開任務管理器就可以直觀的了解進程的定義。
這里顯示了所有當前正在運行的進程,包括應用程序、后臺服務等,那些隱藏在系統底層深處運行的病毒程序或木馬程序都可以在這里找到。
注:任務管理器中:Windows 8及以后版本把“進程”與“應用程序”合并,稱之為“進程”。

線程
線程是進程的一個執行單元,是進程內科調度實體。比進程更小的獨立運行的基本單位。線程也被稱為輕量級進程。
按我的理解就是:如果要運行一個進程,需要多個線程來一起配合才能正常運行,如下圖:點開任務管理器WPS下的向右箭頭,就可以看到以下的圖示,
下面羅列的可能是運行WPS的部分子線程(我也不知道是不是全部線程,如果有錯歡迎大家在評論區指正)。

進程有單線程多線程的區別,這里就不一一羅列。老師上課講的暫時不太明白(JVM 角度說進程和線程之間的關系),需要進一步理解的可以去文章尾部查看參考文章
進程與線程的區別
| 類別 | 區別 |
| 地址空間 | 線程共享本進程的地址空間,而進程之間是獨立的地址空間。 |
| 資源 | 線程共享本進程的資源如內存、I/O、cpu等,不利于資源的管理和保護,而進程之間的資源是獨立的,能很好的進行資源管理和保護。 |
| 健壯性 | 多進程要比多線程健壯,一個進程崩潰后,在保護模式下不會對其他進程產生影響,但是一個線程崩潰整個進程都死掉。 |
| 執行過程 | 多進程要比多線程健壯,一個進程崩潰后,在保護模式下不會對其他進程產生影響,但是一個線程崩潰整個進程都死掉。 |
| 可并發性 | 兩者均可并發執行。 |
| 切換時 | 進程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好于進程。同樣如果要求同時進行并且又要共享某些變量的并發操作,只能用線程不能用進程。 |
| 其他 | 線程是處理器調度的基本單位,但是進程不是。 |
進程和線程的根本區別在于隔離性,互不信任的多個任務應當放到多個進程中實現強隔離。但這樣會對性能帶來挑戰,
所以前沿的研究在探索高效的、細粒度的進程間隔離技術,比如這個論文https://www.usenix.org/conference/atc20/presentation/ren
浙公網安備 33010602011771號