**程式設計思想之多執行緒與多程序(1)——以作業系統的角度述說執行緒與程序
程式設計思想之多執行緒與多程序(2)——執行緒優先順序與執行緒安全
程式設計思想之多執行緒與多程序(4)——c++中的多執行緒
程式並不能單獨執行,只有將程式載入到記憶體中,系統為他分配資源後才能夠執行,這種執行的程式稱之為程序,也就是說程序是系統進行資源分配和排程的乙個獨立單位,每個程序都有自己單獨的位址空間。所以說程式與程序的區別在於,程式是指令的集合,是程序執行的靜態描述文字,而程序則是程式在系統上順序執行時的動態活動。
但是程序存在著很多缺陷,主要集中在兩點:
(1).程序只能在同一時間幹一件事情,如果想同時幹兩件事或多件事情,程序就無能為力了。
(2).程序在執行的過程中如果由於某種原因阻塞了,例如等待輸入,整個程序就會掛起,其他與輸入無關的工作也必須等待輸入結束後才能順序執行。
為了解決上述兩點缺陷,引入了執行緒這個概念。
執行緒是程序的乙個實體,也是cpu排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位,有時又被稱為輕權程序或輕量級程序,相對程序而言,執行緒是乙個更加接近於執行體的概念,程序在執行過程中擁有獨立的記憶體單元,而執行緒自己基本上不擁有系統資源,也沒有自己的位址空間,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),執行緒的改變只代表了 cpu 執行過程的改變,而沒有發生程序所擁有的資源變化。除了cpu 之外,計算機內的軟硬體資源的分配與執行緒無關,但是它可與同屬乙個程序的其他的執行緒共享程序所擁有的全部資源。
程序和執行緒的主要差別在於作業系統並沒有將多個執行緒看作多個獨立的應用,來實現程序的排程和管理以及資源分配。程序有獨立的位址空間,乙個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是乙個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的位址空間,乙個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些,對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序,每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口,但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。
最後附一篇材料,以圖的方式將程序和執行緒做了很好的模擬:
計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。
假定工廠的電力有限,一次只能供給乙個車間使用。也就是說,乙個車間開工的時候,其他車間都必須停工。背後的含義就是,單個cpu一次只能執行乙個任務
程序就好比工廠的車間,它代表cpu所能處理的單個任務。任一時刻,cpu總是執行乙個程序,其他程序處於非執行狀態。
乙個車間裡,可以有很多任務人。他們協同完成乙個任務。
執行緒就好比車間裡的工人。乙個程序可以包括多個執行緒。
車間的空間是工人們共享的,比如許多房間是每個工人都可以進出的。這象徵乙個程序的記憶體空間是共享的,每個執行緒都可以使用這些共享記憶體。
可是,每間房間的大小不同,有些房間最多只能容納乙個人,比如廁所。裡面有人的時候,其他人就不能進去了。這代表乙個執行緒使用某些共享記憶體時,其他執行緒必須等它結束,才能使用這一塊記憶體。
乙個防止他人進入的簡單方法,就是門口加一把鎖。先到的人鎖上門,後到的人看到上鎖,就在門口排隊,等鎖開啟再進去。這就叫」互斥鎖」(mutual exclusion,縮寫 mutex),防止多個執行緒同時讀寫某一塊記憶體區域。
還有些房間,可以同時容納n個人,比如廚房。也就是說,如果人數大於n,多出來的人只能在外面等著。這好比某些記憶體區域,只能供給固定數目的執行緒使用。
這時的解決方法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。後到的人發現鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做」訊號量」(semaphore),用來保證多個執行緒不會互相衝突。
不難看出,mutex是semaphore的一種特殊情況(n=1時)。也就是說,完全可以用後者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨佔的情況下,還是採用這種設計。
作業系統的設計,因此可以歸結為三點:
(1)以多程序形式,允許多個任務同時執行;
(2)以多執行緒形式,允許單個任務分成不同的部分執行;
(3)提供協調機制,一方面防止程序之間和執行緒之間產生衝突,另一方面允許程序之間和執行緒之間共享資源。
執行緒同步之訊號量
鏈結
程式 程序 執行緒區別與聯絡。
定義 一 程式只是一組指令的有序集合,二 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,是系統進行資源分配和排程的乙個獨立單位 三 執行緒是程序的乙個實體,是cpu排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的...
程序與執行緒的區別聯絡
自 對於執行緒,程序的概念一直都是比較模糊,最近整理了一下。總結起來就是,執行緒是程序的一部分,程序是程式的一部分。這個說法不準確,但是可以指出期間的差別 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位.執行緒是程序的乙個實體,是cpu排程和...
程序與執行緒的區別與聯絡
程序 資源分配的基本單位,也是排程執行的基本單位 執行緒 程序中執行執行的最小單位,執行緒是作業系統可識別的最小執行和排程單位 兩者的關係 1.乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒 2.程序是資源分配的基本單位。同一程序中的所有執行緒共享該程序的資源包括 段 和常量 資料段 全域性...