什么是行程
行程的定義是:指在系統中能獨立運行并作為資源分配的基本單位,它是由一組機器指令、資料和堆疊等組成的,是一個能獨立運行的活動物體,
通俗直白的講:行程是系統中正在運行的一個程式,程式一旦運行就是行程,
查看行程
在Windows系統中,打開QQ程式這個軟體,系統就會創建一個行程,通過任務欄管理器可以方便直觀的查看,如下圖所示:

在Linux作業系統中,執行ps -aux指令,下圖所示,

行程特征
動態性:行程的實質是程式在多道程式系統中的一次執行程序,行程是動態產生,動態消亡的,在PHP的WEB程式中,用戶每次請求都動態產生一個php-fpm的行程,結束后又動態消亡,行程的動態性可以通過top命令查看,
并發性:任何行程都可以同其他行程一起并發執行,行程與執行緒樣都具有并發性,單核CPU,進度在處理多任務時,與執行緒一樣也是輪流使用資源,
獨立性:行程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位,在Windows系統中,同時開啟多個應用程式,每個應用程式占用的資源各有不同,
異步性:由于行程間的相互制約,使行程具有執行的間斷性,即行程按各自獨立的、不可預知的速度向前推進,這好比我們在Windows作業系統中既運行瀏覽器,又能同時運行QQ接收到訊息,他們之間各自獨立互不依賴且互不影響,各個程式又保持著運行狀態,
結構特征:行程由程式、資料和行程控制塊三部分組成,關于結構特征會比較復雜,放在進度的PCB章節中詳細介紹,

行程的生命周期
(1) 就緒→執行
處于就緒狀態的行程,當行程調度程式為之分配了處理機后,該行程便由就緒狀態轉變成執行狀態,
(2) 執行→就緒
處于執行狀態的行程在其執行程序中,因分配給它的一個時間片已用完或更高優先級的行程搶占而不得不讓出處理機,于是行程從執行狀態轉變成就緒狀態,
(3) 執行→阻塞
正在執行的行程由于發生某事件而暫時無法繼續執行時,便放棄處理機而處于暫停狀態,亦即行程的執行受到阻塞,把這種暫停狀態稱為阻塞狀態,
處于阻塞狀態的行程排成一個佇列,稱為阻塞佇列,有的系統則根據阻塞原因的不同而把處于阻塞狀態的行程排成多個佇列,
(4) 阻塞→就緒
處于阻塞狀態的行程,若其等待的事件已經發生,于是行程由阻塞狀態轉變為就緒狀態,
(5) 運行→終止
程式執行完畢,撤銷而終止,
舉例說明:
通過java jar指令運行Java程式,即創建了一個行程,同時進入就緒狀態,用戶通過Http請求訪問應用,CPU調度到這個行程,行程實時回傳結果給用戶,又進入就緒,若程式處理耗時較長,那行程處于堵塞狀態(但CPU不堵塞,等時間片到又會調度到另一個行程),等程式處理完成,又進入就緒狀態繼續等待用戶請求,假設程式在處理的程序中導致程式崩潰,嚴重情況則有可能終止行程,
以上是最經典也是最基本的三種行程狀態(就緒,執行,堵塞),但現在的作業系統都根據需要重新設計了一些新的狀態,

運行狀態:是運行態和就緒態的合并,表示行程正在運行或準備運行,
可中斷睡眠狀態(淺度睡眠):行程正在睡眠(被阻塞),等待資源到來是喚醒,也可以通過其他行程信號或時鐘中斷喚醒,進入運行佇列,
不可中斷睡眠狀態(深度睡眠狀態):其和淺度睡眠基本類似,但有一點就是不可被其他行程信號或時鐘中斷喚醒,
暫停狀態:行程暫停執行接受某種處理,如正在接受除錯的行程處于這種狀態,
僵死狀態:行程已經結束但未釋放PCB,
top指令
在Linux系統中,得知行程的狀態與其它資訊可以使用top指令查看輸入資訊:
PID:行程ID
USER:行程的所有者
PR:行程的優先級
NI:nice值,負值表示高優先級,正值表示低優先級
VIRT:行程占用虛擬記憶體的大小
RES:行程占用物理記憶體的大小
SHR:行程占用共享記憶體的大小
S:行程的狀態,D=睡眠狀態,R=運行狀態,S=睡眠狀態,T=停止狀態,Z=僵尸行程
%CPU:行程占用CPU的百分比
%MEM:行程占用物理記憶體的百分比
TIME+:行程占用CPU的總時長
COMMAND:行程使用的命令列,使用 top -c 可以查看詳細的命令列
最后
為什么要學習行程,因為對處理機即CPU的管理可歸結為對行程的管理,進一步而言,能控制好行程,那么就能最大化利用CPU資源,提高程式運行效率,
搜索并關注微信公眾號:iamleiyongjun;每周都有【由淺入深的并發編程】教程分享,開發中間件不再是夢想!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6691.html
標籤:其他
下一篇:LeetCode 十月份題目匯總
