網(wǎng)站開發(fā)工程師社交百度代發(fā)收錄
文章目錄
- 1. 優(yōu)先級的基本概念
- 2. 為什么存在優(yōu)先級
- 3. 查看系統(tǒng)進程
- 4. PRI and NI
- 5. top命令修改已存在進程的nice值
- 6. 其他概念
1. 優(yōu)先級的基本概念
本篇文章講解進程優(yōu)先級,首先我們來了解一下進程優(yōu)先級的概念:
- cpu資源分配的先后順序,就是指進程的優(yōu)先級(priority)。
- 優(yōu)先權(quán)高的進程具有優(yōu)先執(zhí)行權(quán)利。配置進程優(yōu)先權(quán)對多任務環(huán)境的linux很有用,可以改善系統(tǒng)性能。
還可以把進程運行到指定的CPU上,這樣一來,把不重要的進程安排到某個CPU,可以大大改善系統(tǒng)整體性能。
這是優(yōu)先級的概念
我們之前學習過權(quán)限,權(quán)限決定的是能不能的問題。比如你想對某個文件進行修改操作,那要看你有沒有對應的權(quán)限,有的話,你才能做。
而優(yōu)先級呢是在能做的基礎上,決定誰先誰后的問題。
比如我們在學校吃飯,餐廳的窗口數(shù)量是有限的,我們?nèi)ベI飯的時候如果人比較多那我們需要排隊。那排隊的這些學生,它們都可以打飯,但是要有一個先后順序,那正常情況下排在前面的同學它打飯的優(yōu)先級就高,可以先打;排在后面的同學優(yōu)先級就低。
2. 為什么存在優(yōu)先級
那為什么會存在優(yōu)先級呢?
資源有限。
就好比我們在學校買飯為什么要排隊呢?為什么要有先后呢?
因為窗口的數(shù)量有限,如果一個學生一個窗口,那就不用排了。
那進程為什么也有優(yōu)先級呢?
因為CPU資源有限。
那我們了解了什么是優(yōu)先級和為什么存在優(yōu)先級之后,下面我們就來具體看看Linux上進程的優(yōu)先級是什么樣子的:
3. 查看系統(tǒng)進程
在Linux上,使用ps -l
命令可以查看當前正在運行的進程列表,并提供關于這些進程的詳細信息:
我們很容易注意到其中的幾個重要信息,有下:
UID : 代表執(zhí)行者的身份
PID : 代表這個進程的代號(進程標識符)
PPID :代表這個進程是由哪個進程發(fā)展衍生而來的,亦即父進程的代號/PID
PRI :代表這個進程可被執(zhí)行的優(yōu)先級,其值越小越早被執(zhí)行
NI :代表這個進程的nice值,是進程優(yōu)先級的修正數(shù)據(jù)
那這里我們重點要來談一談PRI和NI
4. PRI and NI
PRI:
PRI即進程的優(yōu)先級,或者通俗點說就是程序被CPU執(zhí)行的先后順序,也還是比較好理解的,此值越小進程的優(yōu)先級別越高
NI(NICE):
nice值,表示進程可被執(zhí)行的優(yōu)先級的修正數(shù)據(jù)
PRI值越小越快被執(zhí)行,那么加入nice值后,將會使得PRI變?yōu)?#xff1a;PRI(new)=PRI(old)+nice
這樣:
當nice值為負值的時候,那么該程序?qū)?yōu)先級值將變小,即其優(yōu)先級會變高,則其越快被執(zhí)行
所以,調(diào)整進程優(yōu)先級,在Linux下,通常就是調(diào)整進程nice值
nice其取值范圍是-20至19,一共40個級別
5. top命令修改已存在進程的nice值
那下面我們就來演示一下,如何修改進程優(yōu)先級
我們來寫這樣一個代碼:
死循環(huán)打印.
,每次printf之后休眠一秒。
這里的fflush函數(shù)我們之前進度條那篇文章講過,這里就不再解釋了
然后我們執(zhí)行這個程序:
它就每隔一秒打印一個點。
那這時:
讓這個進程跑起來,然后我們執(zhí)行
ps -al
a選項: 顯示終端上的所有進程,包括其他用戶的進程。
然后我們就能看到我們的這個myproc進程,它的PRI是80,NI是0
那如果我現(xiàn)在想修改它的優(yōu)先級,怎么做呢?
這里用到的命令——
top
輸入一個top,回車
然后輸入r(renice)
然后,你要修改那個進程的NICE值,就輸入誰的PID,這里myproc的PID是20796
然后,再輸入要修改的值,那我這里輸入一個-20
但是我們看到這里顯示請求被拒絕了。
怎么回事呢?
修改 NI 值時有幾個注意事項:
NI 范圍是 -20~19。
普通用戶調(diào)整 NI 值的范圍是 0~19,而且只能調(diào)整自己的進程。
普通用戶只能調(diào)高 NI 值,而不能降低。如原本 NI 值為 0,則只能調(diào)整為大于 0。
只有 root 用戶才能設定進程 NI 值為負值,而且可以調(diào)整任何用戶的進程。
所以怎么辦呢?
我們可以切換成root;或者可以使用sudo提升top命令的權(quán)限
所以我們這次輸入sudo top
然后同樣的操作
這次就成功了。
當然還有一點就是上面說NI 范圍是 -20~19。那如果我們設置的時候超出了這個范圍,可以嗎?
🆗,你輸入的值可以超出這個范圍比如-30,但是最終的結(jié)果還是按-20。不會超過這個范圍。
我們再來是一個,我們NICE給個正值,讓PRI變大看看:
我們給個100,那PRI真的會+100嘛,當然不行,它超過范圍[-20,19]了,所以真實應該是19。
那按照上面說的PRI(new)=PRI(old)+nice
上次我們修改之后PRI是60,那60+19應該是79
我們看看是不是79:
欸,怎么回事,不是79,而是99。
為什么呢?
PRI(new)=PRI(old)+nice
公式確實是這樣的,但是這個PRI(old)
它的值,一直都是80,雖然上一次我們修改之后它的PRI是60。
但是這個PRI(old)
不受影響,它一直都是80。
6. 其他概念
競爭性:系統(tǒng)進程數(shù)目眾多,而CPU資源只有少量,甚至1個,所以進程之間是具有競爭屬性的。為了高效完成任務,更合理競爭相關資源,便具有了優(yōu)先級
獨立性:多進程運行,需要獨享各種資源,多進程運行期間互不干擾
并行:多個進程在多個CPU下分別,同時進行運行,這稱之為并行
并發(fā):多個進程在一個CPU下采用進程切換的方式,在一段時間之內(nèi),讓多個進程都得以推進,稱之為并發(fā)。