也是在面試時被問到了,感覺答得不是很到位,於是回來後又仔細研究了一下,自己做乙個總結。
程序與執行緒是作業系統中的基本概念,在最開始學習這門專業課時就覺得比較抽象。抽象的東西就要拿實際事物來模擬,就可以非常容易理解了,清晰易懂。
我們將計算機中的cpu比作乙個工廠,它的任務就只是執行計算。
這個工廠存在乙個缺陷,就是當地的電力只允許乙個車間工作,而這個工廠是有好多車間的。在有車間正在工作的前提下,其他車間都要等待其完工才可以開工。模擬過來就是說,乙個工廠代表著乙個cpu,而單個cpu一次只能執行乙個任務。二車間則代表程序,就是說cpu同一時刻只能處理乙個程序。
在乙個車間裡,會有好多任務人一起開工。這時,每個工人就代表了乙個執行緒。乙個程序可以由多個執行緒構成。也可以說執行緒是cpu排程和分派的基本單元。這時會有這樣一種情況發生,就是有可能乙個車間只有乙個工人。
在車間中,所有工人共享一塊空間。這代表著程序擁有自己的資源,比如說記憶體。
在車間中,有的車間工人們可以隨意進出。即乙個程序的記憶體空間是共享的,所有程序可以分配該記憶體。
而一些特殊的車間由於空間很小,只能允許乙個工人在裡面開工,只有當這個工人出來時其他工人才可以進去。這表示一些執行緒享用某些記憶體時,其他執行緒需要等待它結束才可以工作。
乙個防止他人進入的簡單方法,就是門口加一把鎖。先到的人鎖上門,後到的人看到上鎖,就在門口排隊,等鎖開啟再進去。這就叫」互斥鎖」(mutual exclusion,縮寫 mutex),防止多個執行緒同時讀寫某一塊記憶體區域。
還有些空間規定只能允許n個人在裡面開工,多於n個人時需要現在外面等著,即某些記憶體區域只能允許固定數目的執行緒使用。這種情況有一種解決辦法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。後到的人發現鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做」訊號量」(semaphore),用來保證多個執行緒不會互相衝突。所以說呢,mutex是semaphore的一種特殊情況(n=1時)。
因此可以歸結為三點:
(1)以多程序形式,允許多個任務同時執行;
(2)以多執行緒形式,允許單個任務分成不同的部分執行;
(3)提供協調機制,一方面防止程序之間和執行緒之間產生衝突,另一方面允許程序之間和執行緒之間共享資源。
面試 執行緒和程序的區別
1 首先是定義 程序 是執行中一段程式,即一旦程式被載入到記憶體中並準備執行,它就是乙個程序。程序是表示資源分配的的基本概念,又是排程執行的基本單位,是系統中的併發執行的單位。執行緒 單個程序中執行中每個任務就是乙個執行緒。執行緒是程序中執行運算的最小單位。2 乙個執行緒只能屬於乙個程序,但是乙個程...
面試 (執行緒和程序的區別)
1 首先是定義 程序 是執行中一段程式,即一旦程式被載入到記憶體中並準備執行,它就是乙個程序。程序是表示資源分配的的基本概念,又是排程執行的基本單位,是系統中的併發執行的單位。執行緒 單個程序中執行中每個任務就是乙個執行緒。執行緒是程序中執行運算的最小單位。2 乙個執行緒只能屬於乙個程序,但是乙個程...
執行緒與程序的區別
原文 程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂 1 計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2 假定工廠的電力有限,一次只能供給乙個車間使用...