進程和線程只有一字之差,看得快(一目十行)的同學可能一下子就忽略過去了。感覺他們像孿生兄弟一樣。進程=線程?好像這兩兄弟也差不多吧?如果你真這麼想的話,恭喜你,你需要學習了。
什麼是進程
進程是程序處理機器上的一次執行的過程,它是系統進行資源分配和調度的一個獨立的單位。如果你的PC的Windows 10的話,你空白處右鍵-任務管理器。第一個列表就是進程了。它是一個獨立程序執行體(簡單說你雙擊點開的任何一個程序在任務管理器中都是一個進程)。
什麼是線程
線程是進程的一個實體,它是比進程更小的一個能獨立運行的存在。線程擁有的資源很少,它和同一個進程中的其他線程共享進程的資源。簡單點來講,線程是不能獨立於進程存在的。它呢永遠是進程的一份子。
差異總結
地址空間差異
同一進程的線程共享本進程的地址空間,而進程之間則是獨立的地址空間。資源共享差異
(一家有多口人,但是最後還是住在一起的。每家人的住址都是不一樣的)
同一進程內的線程共享本進程的資源,但是進程之間的資源是獨立的
(不是一家人不進一家門,好東西要一家人共享的。別人家的東西能免費共享嗎?娃哈哈!)
健壯性差異
一個進程崩潰後,在保護模式下不會對其他進程產生影響,一個線程崩潰整個進程都死掉,所以多進程要比多線程健壯。
(想想現在新冠,一人得病,一家人都要被殃及,但是樓下的沒啥事呀!照樣的折騰!)
資源消耗差異
進程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好於進程。同樣如果要求同時進行並且又要共享某些變量的併發操作,只能用線程不能用進程;
(這就是爲什麼現在多線程併發編程火熱的原因了!沒辦法現在地球人太多了!)
執行差異
每個獨立的進程有一個程序運行的入口、順序執行序列和程序出口。線程必須依存在進程中。
(每家的大門都只有那麼一個,如果有意見,另外賣新房子呀!)
大小差異
線程是處理器調度的基本單位,但是進程不是。
(一個人是不能再拆了,但是一家人可以分成幾個人)