程序、執行緒、程序池、程序三態、同步、非同步、併發、並行、序列
點選左上方藍色“ 一口Linux ”,選擇“ 設為星標 ”
來源:cnblogs.com/songhaixing/p/13799827.html
來源:cnblogs.com/songhaixing/p/13799827.html
一程序, 執行緒
1.程序
什麼是程序?
-
開發寫的程式碼我們稱為程式,那麼將開發的程式碼執行起來。我們稱為程序。
-
明白點: 當我們執行一個程式,那麼我們將執行的程式叫程序。
精簡重點
程序是申請一塊記憶體空間,將資料放到記憶體空間中去, 是申請資料的過程是最小的資源管理單元
-
程序是執行緒的容器
程式與程序的區別
-
程式是資料和指令的集合, 是一個 靜態的概念 , 就是一堆程式碼, 可以長時間的儲存在系統中
-
程序是程式執行的過程, 是一個 動態的概念 , 程序存在著生命週期, 也就是說程序會隨著程式的終止而銷燬, 不會永久存在系統中
程序之間互動
-
程序之間通過 TCP/IP 埠實現
2.執行緒
什麼是執行緒
-
執行緒是作業系統能夠進行 運算排程的最小單位 。
-
它被包含在程序之中,是 程序中的實際運作單位 。
-
一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。
精簡重點
是程序的一條流水線, 只用來執行程式,而不涉及到申請資源, 是程式的實際執行者最小的執行單元
執行緒之間互動
-
多個執行緒共享同一塊記憶體,通過共享的記憶體空間來進行互動
3.程序與執行緒的關係
例子:
我們開啟一個聊天軟體,這就是開啟了一個程序;當我們在軟體裡面開啟一些功能,比如空間, 掃一掃, 設定...,這些操作就是執行緒
所以可以說 "程序" 包含 "執行緒", "執行緒" 是 "程序" 的子集
程序是執行緒的容器
工廠流水線例子:
![](http://mdimg.wxwenku.com/getimg/ccdf080c7af7e8a10e9b88444af9839320cfd5237c1c870d67208937a1ae3f54769f9615b94600bf17a8a893bec9d0c5.jpg)
4.總結
-
程序:指在系統中正在執行的一個應用程式;程式一旦執行就是程序;程序——
資源分配的最小單位
。 -
執行緒:系統分配處理器時間資源的基本單元,或者說程序之內獨立執行的一個單元執行流。執行緒——
程式執行的最小單位
。 -
程序要分配一大部分的記憶體,而執行緒只需要分配一部分棧就可以了.
-
一個程式至少有一個程序,一個程序至少有一個執行緒.
-
一個執行緒可以建立和撤銷另一個執行緒,同一個程序中的多個執行緒之間可以併發執行.
二.並行, 併發, 序列
-
併發: 多個任務看起來是同時進行, 這是一種假並行
單核下使用多道技術實現
![](http://mdimg.wxwenku.com/getimg/6b990ce30fa9193e296dd37902816f4bcd2f16eeeb5bd24b0f096820accbcffb43a657888fbafd8fa15c4848f2eade1e.jpg)
-
並行: 多個任務同時進行
並行必須有多核才能實現,否則只能實現併發(偽並行)
![](http://mdimg.wxwenku.com/getimg/ccdf080c7af7e8a10e9b88444af98393468a8a2155dfb8ea7ecc294574c9dcc2cd30a2266e19b42e6eff07ab9975db14.jpg)
-
序列: 一個程式完完整整的執行完,再執行下一個程序
![](http://mdimg.wxwenku.com/getimg/6b990ce30fa9193e296dd37902816f4b7e25089ece9e8fafda0b52471043732b3bce588e4bf4e959e88068104a7e34aa.jpg)
四.任務執行的三種狀態
程序在執行的過程中不斷地改變其執行狀態
通常一個執行的程序必須具有三種狀態:就緒態, 執行態, 阻塞態
1.就緒態 (Ready)
-
當程序已分配到除CPU以外的所有必要的資源後,只要再獲得CPU, 便可執行程式, 程序這時的狀態就稱為就緒態,
-
在一個系統中處於就緒態的程序可能有多個, 通常將他們排成一個佇列, 這就叫就緒佇列
2.執行態 (Running)
-
當程序已經獲得CPU操作許可權, 其程式正在執行, 著就叫做執行態
-
在單核作業系統中, 只有一個程序處於執行態, 多核作業系統有多個程序處於執行態
3.阻塞態 (Blocked)(sleep)
-
正在執行的程序, 由於等待某個事件而無法執行時, 便被作業系統剝奪了cpu的操作時間, 這是就是阻塞態
-
引起阻塞的原因多種, 例如: 等待I/O操作, 更高優先順序的任務搶走了CPU許可權等.
4.程序三種狀態 間的轉換
一個程序在執行期間, 會不斷地在一種狀態切換到另一隻種狀態
他可以是多次處於就緒態和執行態, 也可以多次處於阻塞態, 下圖是三種狀態的轉換圖
就緒態➠➠執行態
處於就緒態的程序, 當程序排程程式為之分配了CPU的時間片後, 該程序就會由就緒態轉變成執行態
執行態➠➠就緒態
處於執行態的程序在執行過程中, 因為分配的時間片用完了, 於是失去了CPU的使用許可權, 執行態就會重新轉為就緒態
執行態➠➠阻塞態
正在執行的程序由於遇到I/O操作或被更高優先順序的任務搶走CPU使用許可權而無法繼續執行, 便從執行態轉為阻塞態
阻塞態➠➠就緒態
處於阻塞態的程序, 若其等待的事情已經處理完畢, 於是程序從阻塞態轉為就緒態
四.任務提交的兩種方式
1.同步
-
同步是指傳送方傳送資料後, 等接收方發回響應後才發下一個數據報的通訊方式
-
同步是指兩個程式的執行是相關的, 其中一個執行緒在阻塞需要等待狀態, 那另一個執行緒才執行
2.非同步
-
非同步是指傳送方發出資料後, 不等接收方發回響應, 接著就發下個數據報的通訊方式
-
非同步是指兩個執行緒毫無相關, 自己執行自己的
3.例子
同步
❶你叫我去吃飯, 我聽到了就立即和你去吃飯, 如果沒有聽到, 你就不停的叫, 直到我告訴你聽到了, 才一起去吃飯
❷打電話好比同步, 兩邊是同時進行不能再打給另一個人
非同步
❶你叫我去吃飯, 然後自己去吃飯了, 我得到訊息後可能立即走, 也可能過會兒走
❷發訊息好比非同步, 和一個人發完訊息就可能和另一個人發訊息
五.程序池
1.什麼是程序池?
-
程序池是 資源程序 , 管理程序 組成的技術的應用.
2.為什麼要有程序池?
:open_mouth:忙時會有成千上萬的任務需要被執行,閒時可能只有零星任務。
:unamused:那麼在成千上萬個任務需要被執行的時候,我們就需要去建立成千上萬個程序麼?
:sweat:首先,建立程序需要消耗時間,銷燬程序也需要消耗時間。
:worried:第二即便開啟了成千上萬的程序,作業系統也不能讓他們同時執行,這樣反而會影響程式的效率。
:disappointed_relieved:因此我們不能無限制的根據任務去開啟或者結束程序。那麼我們要怎麼做呢?
3.程序池的概念
-
定義一個池子,在裡面 放上固定數量的程序 ,有需求來了,就拿一個池中的程序來處理任務
-
等到處理完畢, 程序並不關閉 ,而是將程序再放回程序池中繼續等待任務
-
如果有很多工需要執行,池中的程序數量不夠, 任務就要等待 之前的程序執行任務完畢歸來,拿到空閒程序才能繼續執行。
-
也就是說,進池中程序的數量是固定的,那麼同一時間最多有 固定數量 的程序在執行
-
這樣不會增加作業系統的排程難度,還節省了開關程序的時間,也一定程度上能夠 實現併發效果 。
4.資源程序
-
預先建立好的空閒程序,管理程序(好比池子)會把工作分發到空閒程序來處理。
5.管理程序
-
管理程序負責建立資源程序,把工作交給空閒資源程序處理,回收已經處理完工作的資源程序。
資源程序與管理程序的互動
管理程序如何有效的管理資源程序,分配任務給資源程序?
通過IPC,訊號,訊號量,訊息佇列,管道等進行互動。
end
一口Linux
關注,回覆【 1024 】海量Linux資料贈送
精彩文章合集
文章推薦
☞ 【專輯】 ARM
☞ 【專輯】 粉絲問答
☞ 【專輯】 所有原創
☞ 【 專輯 】 linux 入門
☞ 【 專輯 】 計算機網路
☞ 【 專輯 】 Linux驅動
☞ 【乾貨】 嵌入式驅動工程師學習路線
☞ 【乾貨】 Linux嵌入式所有知識點-思維導圖
- 程序、執行緒、程序池、程序三態、同步、非同步、併發、並行、序列
- 瑞芯微rk356x板子快速上手
- Linux最強總結!
- 微控制器跑作業系統,有幾種選擇?
- 網路不通?服務丟包?這篇 TCP 連線狀態詳解及故障排查,收好了
- 效能之巔-優化你的程式
- 嵌入式Qt-交叉編譯FFmpeg與視訊播放測試
- 高德導航免費,那他靠什麼收入?
- 如何實現按鍵的短按、長按檢測?
- 當代“程式猿”必備的神器有哪些?看看你用過幾個!
- 一文讀懂 | Linux系統啟動過程
- CAN協議詳解
- 手把手教你ubuntu下移植MJPG-streamer
- 一文搞懂Linux核心的4大IO排程演算法
- 成為架構師!必須掌握10種常見的架構模式
- Shell 指令碼中經典的13個面試題
- 圖解|Linux記憶體背後的那些神祕往事
- C語言和C 的區別和聯絡
- 如何從頭自己製作開發板?圖文並茂,一步步操作給你看。
- 資料結構中常見的樹