【14期】你能說說進程與線程的區(qū)別嗎
閱讀本文大概需要 2.5 分鐘。
來自:https://www.zhihu.com/question/25532384
兩者的定義
進程與線程的區(qū)別
進程是資源分配最小單位,線程是程序執(zhí)行的最小單位; 進程有自己獨立的地址空間,每啟動一個進程,系統(tǒng)都會為其分配地址空間,建立數(shù)據(jù)表來維護代碼段、堆棧段和數(shù)據(jù)段,線程沒有獨立的地址空間,它使用相同的地址空間共享數(shù)據(jù); CPU切換一個線程比切換進程花費小; 創(chuàng)建一個線程比進程開銷小; 線程占用的資源要?進程少很多。 線程之間通信更方便,同一個進程下,線程共享全局變量,靜態(tài)變量等數(shù)據(jù),進程之間的通信需要以通信的方式(IPC)進行;(但多線程程序處理好同步與互斥是個難點) 多進程程序更安全,生命力更強,一個進程死掉不會對另一個進程造成影響(源于有獨立的地址空間),多線程程序更不易維護,一個線程死掉,整個進程就死掉了(因為共享地址空間); 進程對資源保護要求高,開銷大,效率相對較低,線程資源保護要求不高,但開銷小,效率高,可頻繁切換;
加強理解,做個簡單的比喻:進程=火車,線程=車廂
線程在進程下行進(單純的車廂無法運行) 一個進程可以包含多個線程(一輛火車可以有多個車廂) 不同進程間數(shù)據(jù)很難共享(一輛火車上的乘客很難換到另外一輛火車,比如站點換乘) 同一進程下不同線程間數(shù)據(jù)很易共享(A車廂換到B車廂很容易) 進程要比線程消耗更多的計算機資源(采用多列火車相比多個車廂更耗資源) 進程間不會相互影響,一個線程掛掉將導(dǎo)致整個進程掛掉(一列火車不會影響到另外一列火車,但是如果一列火車上中間的一節(jié)車廂著火了,將影響到所有車廂) 進程可以拓展到多機,進程最多適合多核(不同火車可以開在多個軌道上,同一火車的車廂不能在行進的不同的軌道上) 進程使用的內(nèi)存地址可以上鎖,即一個線程使用某些共享內(nèi)存時,其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。(比如火車上的洗手間)-"互斥鎖" 進程使用的內(nèi)存地址可以限定使用量(比如火車上的餐廳,最多只允許多少人進入,如果滿了需要在門口等,等有人出來了才能進去)-“信號量”
推薦閱讀:
【12期】談?wù)勴椖恐袉吸c登錄的實現(xiàn)原理?
【11期】分布式系統(tǒng)接口,如何避免表單的重復(fù)提交?
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

