程序與執行緒理解

2021-10-01 10:47:13 字數 1797 閱讀 9378

程序和執行緒簡單而基本靠譜的定義如下:

程序:程式(**)在資料集上的一次執行,資源分配的基本單位

執行緒:程式的一部分(**塊,某個模組)在資料集上的一次執行,cpu的基本排程單位

一些例子概念理解

cpu+ram+各種資源(比如顯示卡,光碟機,鍵盤,gps, 等等外設)構成我們的電腦,但是電腦的執行,實際就是cpu和相關暫存器以及ram(記憶體)之間的事情。

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

乙個必須知道的事實:執行一段程式**,實現乙個功能的過程介紹 ,當得到cpu的時候,相關的資源必須也已經就位,就是顯示卡啊,gps啊什麼的必須就位,然後cpu開始執行。這裡除了cpu以外所有的就構成了這個程式的執行環境,也就是我們所定義的程式上下文,當這個程式執行完了,或者分配給他的cpu執行時間用完了,那它就要被切換出去,等待下一次cpu的臨幸。在被切換出去的最後一步工作就是儲存程式上下文,因為這個是下次他被cpu臨幸的執行環境,必須儲存。

串聯起來的事實:前面講過在cpu看來所有的任務都是乙個乙個的輪流執行的,具體的輪流方法就是:先引導程式a的上下文,然後開始執行a,儲存程式a的上下文,調入下乙個要執行的程式b的程式上下文,然後開始執行b,儲存程式b的上下文。。。。

*****==== 重要的東西出現了*****===

程序和執行緒就是這樣的背景出來的,兩個名詞不過是對應的cpu時間段的描述,名詞就是這樣的功能。

• 程序就是包換上下文切換的程式執行時間總和 = cpu載入上下文+cpu執行+cpu儲存上下文

執行緒是什麼呢?

程序的顆粒度太大,每次都要有上下的調入,儲存,調出。如果我們把程序比喻為乙個執行在電腦上的軟體,那麼乙個軟體的執行不可能是一條邏輯執行的,必定有多個分支和多個程式段,就好比要實現程式a,實際分成 a,b,c等多個塊組合而成。那麼這裡具體的執行就可能變成:

程式a得到cpu =》cpu載入上下文,開始執行程式a的a小段,然後執行a的b小段,然後再執行a的c小段,最後cpu儲存a的上下文。

這裡a,b,c的執行是共享了a的上下文,cpu在執行的時候沒有進行上下文切換的。這裡的a,b,c就是執行緒,也就是說執行緒是共享了程序的上下文環境,的更為細小的cpu時間段。

到此全文結束,再乙個總結:

程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述,不過是顆粒大小不同

一點區別

執行緒狀態: 執行,就緒,等待。 (無掛起狀態,因為掛起和資源分配有關)

鎖機制

為了解決程式中多個程序和執行緒對資源的搶占問題,還引入了「鎖」的概念。在這個併發模型中,需要開發人員利用「鎖」來處理資源搶占的問題(避免多個執行緒對同一記憶體同時寫入),也就是不讓某乙個資源同時被多於乙個程序(執行緒)所處理而帶來不可預期的後果。

鎖機制:

所謂的鎖,可以理解為記憶體中的乙個整型數,擁有兩種狀態:空閒狀態和上鎖狀態。加鎖時,判斷鎖是否空閒,如果空閒,修改為上鎖狀態,返回成功。如果已經上鎖,則返回失敗。解鎖時,則把鎖狀態修改為空閒狀態。

防止多個執行緒同時讀寫某一塊記憶體區域

引入鎖機制後,又產生了死鎖的問題(資源不足導致)

—— 死鎖的解決方法

如何理解程序與執行緒

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

程序與執行緒(抽象理解)

1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就是說,乙個車間開工的時候,其他車間都必須停工。背後的含義就是,單個cpu一次只能執行乙個任務。3.程序就好比工廠的車間,它代表cpu所能處理的單個任務。任一時刻,cpu...

程序與執行緒的理解

程序是乙個實體。每乙個程序都有它自己的位址空間,一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 文字區域儲存處理器執行的 資料區域儲存變數和程序執行期間使用的動態分配的記憶體 堆疊區域儲存著活動過程呼叫的指令和本地變數。程序是乙個...