程序優先順序

2021-07-31 13:23:46 字數 2209 閱讀 8040

用top或者ps命令會輸出pri/pr、ni

%ni/%nice這三種指標值,這些到底是什麼東西?先給出大概的解釋如下:

pri :程序優先權,代表這個程序可被執行的優先順序,其值越小,優先順序就越高,越早被執行

ni :程序nice值,代表這個程序的優先值

%nice :改變過優先順序的程序的占用cpu的百分比 (呵呵,這句好難理解是吧,不急慢慢來^_^)

pri是比較好理解的,即程序的優先順序,或者通俗點說就是程式被cpu執行的先後順序,此值越小程序的優先級別越高。那ni呢?就是我們所要說的nice值了,其表示程序可被執行的優先順序的修正數值。如前面所說,pri值越小越快被執行,那麼加入nice值後,將會使得pri變為:pri(new)=pri(old)+nice。由此看出,pr是根據nice排序的,規則是nice越小pr越前(小,優先權更大),即其優先順序會變高,則其越快被執行。如果nice相同則程序uid是root的優先權更大。

在linux系統中,nice值的範圍從-20到+19(不同系統的值範圍是不一樣的),正值表示低優先順序,負值表示高優先順序,值為零則表示不會調整該程序的優先順序。具有最高優先順序的程式,其nice值最低,所以在linux系統中,值-20使得一項任務變得非常重要;與之相反,如果任務的nice為+19,則表示它是乙個高尚的、無私的任務,允許所有其他任務比自己享有寶貴的cpu時間的更大使用份額,這也就是nice的名稱的來意。

程序在建立時被賦予不同的優先順序值,而如前面所說,nice的值是表示程序優先順序值可被修正資料值,因此,每個程序都在其計畫執行時被賦予乙個nice值,這樣系統就可以根據系統的資源以及具體程序的各類資源消耗情況,主動干預程序的優先順序值。在通常情況下,子程序會繼承父程序的nice值,比如在系統啟動的過程中,init程序會被賦予0,其他所有程序繼承了這個nice值(因為其他程序都是init的子程序)。

對nice值乙個形象比喻,假設在乙個cpu輪轉中,有2個runnable的程序a和b,如果他們的nice值都為0,假設核心會給他們每人分配1k個cpu時間片。但是假設程序a的為0,但是b的值為-10,那麼此時cpu可能分別給a和b分配1k和1.5k的時間片。故可以形象的理解為,nice的值影響了核心分配給程序的cpu時間片的多少,時間片越多的程序,其優先順序越高,其優先順序值(pri)越低。%nice,就是改變過優先順序的程序的占用cpu的百分比,如上例中就是0.5k/2.5k=1/5=20%。

由此可見,程序nice值和程序優先順序不是乙個概念,但是程序nice值會影響到程序的優先順序變化。

程序的nice值是可以被修改的,修改命令分別是nice和renice。

1、nice命令就是設定乙個要執行command程序的nice值,其命令格式是 nice –n adjustment command command_option,如果這裡不指定adjustment,則預設為10。

2、renice命令就是設定乙個已經在執行的程序的nice值,假設一執行程序本來nice值為0,renice為3後,則這個執行程序的nice值就為3了。

說明:如果使用者設定的nice值超過了nice的邊界值(linux為-20到+19),系統就取nice的邊界值作為程序的nice值。

舉例如下:

對非root使用者,只能將其底下的程序的nice值變大而不能變小。若想變小,得要有相應的許可權。

[oracle@perf_dbc ~]$ nice0

[oracle@perf_dbc ~]$ nice -n 3 ls

agent bin important_bak logs statistics_import.log tmp_forum_stats.dmp tmp_taobao_stats.dmp tmp_tbcat_stats.dmp top.dmp worksh

[oracle@perf_dbc ~]$ nice -n -3 ls

nice: cannot set priority: permission denied

對root使用者,可以給其子程序賦予更小的nice值。

[root@dbbak root]# nice0

[root@dbbak root]# nice -n -3 ls

192.168.205.191.txt anaconda-ks.cfg clariion.log desktop disk1 emc.sh file_sort install.log install.log.syslog log ops rhel_os_soft root_link_name

同樣,renice的執行也必須要有相應的許可權方可執行。

程序優先順序

程序的優先順序可以通過setpriority nice修改優先順序。程序分為普通程序和實時程序。實時程序的優先順序比普通程序的優先順序高。nice的值 20 19值越小優先順序越高。預設為0 不同程序的執行緒優先順序?執行緒會繼承程序的優先順序,核心的排程是執行緒。所以先看程序是普通程序還是實時程序...

程序優先順序

1動態優先順序 因為高優先順序的程序總比低優先順序的程序先被排程,為防止有多個高優先順序且一直占用cpu資源,導致其它程序不能占用cpu,所以引用動態優先順序概念.2互動式的程序 如果某個程序被認為是互動式的,那麼將被賦予較高的優先權,例如 鍵盤輸入.互動式的程序從來不被搶占,並且占用cpu很少,它...

程序優先順序

l 程序優先順序 l 獲取當前程序控制代碼 l 優先順序設定 l 優先順序變動 l 優先順序獲取 一 程序優先順序 優先順序等級 簡單的說就是程序 執行緒 的優先順序越高,那麼就可以分佔相對多的cpu時間片。每個程序都有相應的優先順序,優先順序決定它何時執行和占用 cpu 時間。最終的優先順序共分3...