程序與執行緒的區別

2022-05-03 11:27:26 字數 1588 閱讀 1578

程式並不能單獨執行,只有將程式裝載到記憶體中,系統為它分配資源才能執行,而這種執行的程式就稱之為程序。程式和程序的區別就在於:程式是指令的集合,它是程序執行的靜態描述文字;程序是程式的一次執行活動,屬於動態概念。

在多道程式設計中,我們允許多個程式同時載入到記憶體中,在作業系統的排程下,可以實現併發地執行。這是這樣的設計,大大提高了cpu的利用率。程序的出現讓每個使用者感覺到自己獨享cpu,因此,程序就是為了在cpu上實現多道程式設計而提出的。

程序有很多優點,它提供了多道程式設計,讓我們感覺我們每個人都擁有自己的cpu和其他資源,可以提高計算機的利用率。很多人就不理解了,既然程序這麼優秀,為什麼還要執行緒呢?其實,仔細觀察就會發現程序還是有很多缺陷的,主要體現在兩點上:

如果這兩個缺點理解比較困難的話,舉個現實的例子也許你就清楚了:如果把我們上課的過程看成乙個程序的話,那麼我們要做的是耳朵聽老師講課,手上還要記筆記,腦子還要思考問題,這樣才能高效的完成聽課的任務。而如果只提供程序這個機制的話,上面這三件事將不能同時執行,同一時間只能做一件事,聽的時候就不能記筆記,也不能用腦子思考,這是其一;如果老師在黑板上寫演算過程,我們開始記筆記,而老師突然有一步推不下去了,阻塞住了,他在那邊思考著,而我們呢,也不能幹其他事,即使你想趁此時思考一下剛才沒聽懂的乙個問題都不行,這是其二。

現在你應該明白了程序的缺陷了,而解決的辦法很簡單,我們完全可以讓聽、寫、思三個獨立的過程,並行起來,這樣很明顯可以提高聽課的效率。而實際的作業系統中,也同樣引入了這種類似的機制——執行緒。

因為要併發,我們發明了程序,又進一步發明了執行緒。只不過程序和執行緒的併發層次不同:程序屬於在處理器這一層上提供的抽象;執行緒則屬於在程序這個層次上再提供了一層併發的抽象。如果我們進入計算機體系結構裡,就會發現,流水線提供的也是一種併發,不過是指令級的併發。這樣,流水線、執行緒、程序就從低到高在三個層次上提供我們所迫切需要的併發!

除了提高程序的併發度,執行緒還有個好處,就是可以有效地利用多處理器和多核計算機。現在的處理器有個趨勢就是朝著多核方向發展,在沒有執行緒之前,多核並不能讓乙個程序的執行速度提高,原因還是上面所有的兩點限制。但如果講乙個程序分解為若干個執行緒,則可以讓不同的執行緒執行在不同的核上,從而提高了程序的執行速度。

例如:我們經常使用微軟的word進行文字排版,實際上就開啟了多個執行緒。這些執行緒乙個負責顯示,乙個接受鍵盤的輸入,乙個進行存檔等等。這些執行緒一起執行,讓我們感覺到我們輸入和螢幕顯示同時發生,而不是輸入一些字元,過一段時間才能看到顯示出來。在我們不經意間,還進行了自動存檔操作。這就是執行緒給我們帶來的方便之處。

程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的位址空間,乙個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是乙個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的位址空間,乙個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式 健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。

注:前一陣子去**面試,面試官就問了我這個問題:程序與執行緒的區別是什麼?我當時說了一大堆,但感覺還是沒說關鍵的點上,最後他又問最本質的區別是什麼?我傻了一會,難道剛我說的沒有說到嗎?嘿嘿,確實有點囧啊~~

程序和執行緒的區別-

程序與執行緒及其區別-

多執行緒和多程序的區別(小結)-

執行緒與程序的區別

原文 程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂 1 計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2 假定工廠的電力有限,一次只能供給乙個車間使用...

程序與執行緒的區別

首先來一句概括的總論 程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述。乙個最最基礎的事實 cpu太快,太快,太快了,暫存器僅僅能夠追的上他的腳步,ram和別的掛在各匯流排上的裝置完全是望其項背。那當多個任務要執行的時候怎麼辦呢?輪流著來?或者誰優先順序高誰來?不管怎麼樣的策略,一句話就是...

程序與執行緒的區別

首先來一句概括的總論 程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述。下面細說背景 cpu ram 各種資源 比如顯示卡,光碟機,鍵盤,gps,等等外設 構成我們的電腦,但是電腦的執行,實際就是cpu和相關暫存器以及ram之間的事情。乙個最最基礎的事實 cpu太快,太快,太快了,暫存器僅...