程式和執行緒
一、程式(process)
- 概念
程式就好比是一個工廠的車間,一個工廠可能有多個車間,每個車間代表cpu正在處理的任務,某一時刻,cpu總是在進行一個程式
工廠=執行緒
工人=執行緒
二、執行緒(thread)
- 概念
在一個車間內,想要完成某一項工作,必須有很多個工人,並且多個工人協同完成任務,每個工人,都可以理解為linux系統中程式的工作執行緒。
工人=執行緒
三、程式執行緒關係
- 執行緒共享程式內容資源
- 某一個記憶體資料可以被多個執行緒同時用
- 某一塊記憶體資料只能給一個執行緒使用
- 如果記憶體正在有執行緒使用,並且容不下其他執行緒,需要等待用完(工人上廁所)
- 執行緒不願意等待,直接搶奪記憶體資料,可能會引發混亂,造成資料衝突,崩潰
總結:linux是一個多使用者,多工的作業系統,支援多程式,多執行緒
多程式(linux作業系統,可以同時多個程式在工作)
多執行緒(一個程式中多個執行緒在工作)
單執行緒(一個程式內,只有一個人在幹活,效率很低)
程式的狀態轉換
-
建立狀態:程式在建立時需要申請一個空白PCB,向其中填寫控制和管理程式的資訊,完成資源分配。如果建立工作無法完成,比如資源無法滿足,就無法被排程執行,把此時程式所處狀態稱為建立狀態
-
就緒狀態:程式已經準備好,已分配到所需資源,只要分配到CPU就能夠立即執行
-
執行狀態:程式處於就緒狀態被排程後,程式進入執行狀態
-
阻塞狀態:正在執行的程式由於某些事件(I/O請求,申請快取區失敗)而暫時無法執行,程式受到阻塞。在滿足請求時進入就緒狀態等待系統呼叫
-
終止狀態:程式結束,或出現錯誤,或被系統終止,進入終止狀態。無法再執行
注意:1.程式由執行態→阻塞態是程式做出的主動行為
2.不能由阻塞態直接轉換為執行態
3.不能由就緒態轉換為阻塞態
程式同步和互斥
- 程式同步
同步也稱直接制約關係,它是指為完成某種任務而建立的兩個或者多個程式,這些程式因為需要在某些位置上協調他們的工作次序而產生的制約關係。
- 程式互斥
- 我們把一段時間段只允許一個程式使用的資源稱為臨界資源,許多物理裝置(攝像頭、印表機)都屬於臨界資源。此外還有許多變數、資料。記憶體緩衝區都屬於臨界資源
互斥稱間接制約關係。程式互斥指當一個程式訪問某臨界資源時,另一個想要訪問該臨界資源的程式必須等待,當前訪問臨界資源的程式訪問結束,釋放該資源才能去訪問臨界資源
程式互斥,要遵循的原則
- 1.空閒讓進
- 2.忙則等待
- 3.有限等待
- 4.讓權等待