程序、執行緒、程序池、程序三態、同步、非同步、併發、並行、序列

語言: CN / TW / HK

點選左上方藍色“ 一口Linux ”,選擇“ 設為星標

第一時間看乾貨文章  

【乾貨】 嵌入式驅動工程師學習路線

【乾貨】 Linux嵌入式知識點-思維導圖

1

來源:cnblogs.com/songhaixing/p/13799827.html

一程序, 執行緒

1.程序

什麼是程序?

  • 開發寫的程式碼我們稱為程式,那麼將開發的程式碼執行起來。我們稱為程序。

  • 明白點: 當我們執行一個程式,那麼我們將執行的程式叫程序。

精簡重點

程序是申請一塊記憶體空間,將資料放到記憶體空間中去, 是申請資料的過程是最小的資源管理單元

  • 程序是執行緒的容器

程式與程序的區別

  • 程式是資料和指令的集合, 是一個 靜態的概念 , 就是一堆程式碼, 可以長時間的儲存在系統中

  • 程序是程式執行的過程, 是一個 動態的概念 , 程序存在著生命週期, 也就是說程序會隨著程式的終止而銷燬, 不會永久存在系統中

程序之間互動

  • 程序之間通過 TCP/IP 埠實現

2.執行緒

什麼是執行緒

  • 執行緒是作業系統能夠進行 運算排程的最小單位

  • 它被包含在程序之中,是 程序中的實際運作單位

  • 一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。

精簡重點

是程序的一條流水線, 只用來執行程式,而不涉及到申請資源, 是程式的實際執行者最小的執行單元

執行緒之間互動

  • 多個執行緒共享同一塊記憶體,通過共享的記憶體空間來進行互動

3.程序與執行緒的關係

例子:

我們開啟一個聊天軟體,這就是開啟了一個程序;當我們在軟體裡面開啟一些功能,比如空間, 掃一掃, 設定...,這些操作就是執行緒

所以可以說 "程序" 包含 "執行緒", "執行緒" 是 "程序" 的子集

程序是執行緒的容器

工廠流水線例子:

4.總結

  • 程序:指在系統中正在執行的一個應用程式;程式一旦執行就是程序;程序—— 資源分配的最小單位

  • 執行緒:系統分配處理器時間資源的基本單元,或者說程序之內獨立執行的一個單元執行流。執行緒—— 程式執行的最小單位

  • 程序要分配一大部分的記憶體,而執行緒只需要分配一部分棧就可以了.

  • 一個程式至少有一個程序,一個程序至少有一個執行緒.

  • 一個執行緒可以建立和撤銷另一個執行緒,同一個程序中的多個執行緒之間可以併發執行.

二.並行, 併發, 序列

  • 併發: 多個任務看起來是同時進行, 這是一種假並行

單核下使用多道技術實現

  • 並行: 多個任務同時進行

並行必須有多核才能實現,否則只能實現併發(偽並行)

  • 序列: 一個程式完完整整的執行完,再執行下一個程序

四.任務執行的三種狀態

程序在執行的過程中不斷地改變其執行狀態

通常一個執行的程序必須具有三種狀態:就緒態, 執行態, 阻塞態

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嵌入式所有知識點-思維導圖