第2天--程序和執行緒
阿新 • • 發佈:2021-09-16
程序和執行緒的區別
簡單抽象地瞭解執行緒和程序的關係
做個簡單的比喻:程序=火車,執行緒=車廂
- 執行緒在程序下行進(單純的車廂無法執行)
- 一個程序可以包含多個執行緒(一輛火車可以有多個車廂)
- 不同程序間資料很難共享(一輛火車上的乘客很難換到另外一輛火車,比如站點換乘)
- 同一程序下不同執行緒間資料很易共享(A車廂換到B車廂很容易)
- 程序要比執行緒消耗更多的計算機資源(採用多列火車相比多個車廂更耗資源)
- 程序間不會相互影響(一列火車不會影響到另外一列火車)
- 程序可以拓展到多機,執行緒最多適合多核(不同火車可以開在多個軌道上,同一火車的車廂不能在行進的不同的軌道上)
- 程序使用的記憶體地址可以上鎖,即一個執行緒使用某些共享記憶體時,其他執行緒必須等它結束,才能使用這一塊記憶體。(比如火車上的洗手間)-"互斥鎖"
- 程序使用的記憶體地址可以限定使用量(比如火車上的餐廳,最多隻允許多少人進入,如果滿了需要在門口等,等有人出來了才能進去)-“訊號量”
正規的說法
程序:一個在記憶體中執行的應用程式。
每個程序都有自己獨立的一塊記憶體空間,一個程序可以有多個執行緒,比如在Windows系統中,一個執行的xx.exe就是一個程序。
執行緒:程序中的一個執行任務(控制單元),負責當前程序中程式的執行。一個程序至少有一個執行緒,一個程序可以執行多個執行緒,多個執行緒可共享資料。與程序不同的是同類的多個執行緒共享程序的堆和方法區資源,但每個執行緒有自己的程式計數器、虛擬機器棧和本地方法棧,所以系統在產生一個執行緒,或是在各個執行緒之間作切換工作時,負擔要比程序小得
多,也正因為如此,執行緒也被稱為輕量級程序。
執行緒與程序的區別總結
執行緒具有許多傳統程序所具有的特徵,故又稱為輕型程序(Light-Weight Process)或程序元;而把傳統的程序稱為重型程序(Heavy-Weight Process)。在引入了執行緒的作業系統中,通常一個程序都有若
幹個執行緒,至少包含一個執行緒。
根本區別:程序是作業系統資源分配的基本單位,而執行緒是處理器任務排程和執行的基本單位。
資源開銷:每個程序都有獨立的程式碼和資料空間(程式上下文),程式之間的切換會有較大的開銷;執行緒可以看做輕量級的程序,同一類執行緒共享程式碼和資料空間,每個執行緒都有自己獨立的執行棧和程式計
數器(PC),執行緒之間切換的開銷小。
包含關係:如果一個程序內有多個執行緒,則執行過程不是一條線的,而是多條線(執行緒)共同完成的;執行緒是程序的一部分,所以執行緒也被稱為輕權程序或者輕量級程序。
記憶體分配:同一程序的執行緒共享本程序的地址空間和資源,而程序之間的地址空間和資源是相互獨立的
影響關係:一個程序崩潰後,在保護模式下不會對其他程序產生影響,但是一個執行緒崩潰可能會導致整個程序都死掉。所以多程序要比多執行緒健壯。
執行過程:每個獨立的程序有程式執行的入口、順序執行序列和程式出口。但是執行緒不能獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制,兩者均可併發執行