程序與執行緒

2022-03-16 02:48:40 字數 1467 閱讀 9014

程序是什麼?

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

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

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

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

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

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

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

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

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

執行緒 高階

安全執行緒同步

.net多執行緒的鎖機制

程序與執行緒

程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...

程序與執行緒

程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...

程序與執行緒

程序包括 1 私有的虛位址空間 2 可執行程式 與資料 3 開啟系統資源列表控制代碼 4 安全訪問標誌 5 程序id 6 至少有乙個執行執行緒 執行緒包括 1 一組cpu暫存器狀態 2 兩個堆疊 系統態與使用者態 3 tls 執行緒區域性儲存區 4 執行緒id 5 安全特性 因此程序是不活潑的,它從...