1. 程式人生 > 其它 >【14期】你能說說程序與執行緒的區別嗎

【14期】你能說說程序與執行緒的區別嗎

兩者的定義

程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位。

執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源。

程序與執行緒的區別

  1. 程序是資源分配最小單位,執行緒是程式執行的最小單位;

  2. 程序有自己獨立的地址空間,每啟動一個程序,系統都會為其分配地址空間,建立資料表來維護程式碼段、堆疊段和資料段,執行緒沒有獨立的地址空間,它使用相同的地址空間共享資料;

  3. CPU切換一個執行緒比切換程序花費小;

  4. 建立一個執行緒比程序開銷小;

  5. 執行緒佔用的資源要⽐程序少很多。

  6. 執行緒之間通訊更方便,同一個程序下,執行緒共享全域性變數,靜態變數等資料,程序之間的通訊需要以通訊的方式(IPC)進行;(但多執行緒程式處理好同步與互斥是個難點)

  7. 多程序程式更安全,生命力更強,一個程序死掉不會對另一個程序造成影響(源於有獨立的地址空間),多執行緒程式更不易維護,一個執行緒死掉,整個程序就死掉了(因為共享地址空間);

  8. 程序對資源保護要求高,開銷大,效率相對較低,執行緒資源保護要求不高,但開銷小,效率高,可頻繁切換;

程序=火車,執行緒=車廂

  • 執行緒在程序下行進(單純的車廂無法執行)

  • 一個程序可以包含多個執行緒(一輛火車可以有多個車廂)

  • 不同程序間資料很難共享(一輛火車上的乘客很難換到另外一輛火車,比如站點換乘)

  • 同一程序下不同執行緒間資料很易共享(A車廂換到B車廂很容易)

  • 程序要比執行緒消耗更多的計算機資源(採用多列火車相比多個車廂更耗資源)

  • 程序間不會相互影響,一個執行緒掛掉將導致整個程序掛掉(一列火車不會影響到另外一列火車,但是如果一列火車上中間的一節車廂著火了,將影響到所有車廂)

  • 程序可以拓展到多機,程序最多適合多核(不同火車可以開在多個軌道上,同一火車的車廂不能在行進的不同的軌道上)

  • 程序使用的記憶體地址可以上鎖,即一個執行緒使用某些共享記憶體時,其他執行緒必須等它結束,才能使用這一塊記憶體。(比如火車上的洗手間)-"互斥鎖"

  • 程序使用的記憶體地址可以限定使用量(比如火車上的餐廳,最多隻允許多少人進入,如果滿了需要在門口等,等有人出來了才能進去)-“訊號量”