linux 是乙個多使用者、多工的作業系統,系統中通常執行著非常多的程序。但是 cpu 在乙個時鐘週期內只能運算一條指令(現在的 cpu 採用了多執行緒、多核心技術,所以在乙個時鐘週期內可以運算多條指令。 但是同時運算的指令數也遠遠小於系統中的程序總數),那問題來了:誰應該先運算,誰應該後運算呢?這就需要由程序的優先順序來決定了。
另外,cpu 在運算資料時,不是把乙個整合算完成,再進行下乙個程序的運算,而是先運算程序 1,再運算程序 2,接下來運算程序 3,然後再運算程序 1,直到程序任務結束。不僅如此,由於程序優先順序的存在,程序並不是依次運算的,而是哪個程序的優先順序高,哪個程序會在一次運算迴圈中被更多次地運算。
這樣說很難理解,我們換一種說法。假設我現在有 4 個孩子(程序)需要餵飯(運算),我更喜歡孩子 1(程序 1 優先順序更高),孩子 2、孩子 3 和孩子 4 一視同仁(程序 2、程序 3 和程序 4 的優先順序一致)。現在我開始餵飯了,我不能先把孩子 1 餵飽,再喂其他的孩子,而是需要迴圈餵飯(cpu 運算時所有程序迴圈運算)。那麼,我在餵飯時(運算),會先喂孩子 1 一口飯,然後再去喂其他孩子。而且在一次迴圈中,先喂孩子 1 兩口飯,因為我更喜歡孩子 1(優先順序高),而喂其他的孩子一口飯。這樣,孩子 1 會先吃飽(程序 1 運算得更快),因為我更喜歡孩子 1。
在 linux 系統中,表示程序優先順序的有兩個引數:priority 和 nice。還記得 "ps -le" 命令嗎?
[root@localhost ~]# ps -le
f s uid pid ppid c pri ni addr sz wchan tty time cmd
4 s 0 1 0 0 80 0 - 718 - ? 00:00:01 init
1 s 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd
...省略部分輸出...
其中,pri 代表 priority,ni 代表 nice。這兩個值都表示優先順序,數值越小代表該程序越優先被 cpu 處理。不過,pri值是由核心動態調整的,使用者不能直接修改。所以我們只能通過修改 ni 值來影響 pri 值,間接地調整程序優先順序。
pri 和 ni 的關係如下:
pri (最終值) = pri (原始值) + ni
其實只需要記得,我們修改 ni 的值就可以改變程序的優先順序即可。ni 值越小,程序的 pri 就會降低,該程序就越優先被 cpu 處理;反之,ni 值越大,程序的 pri 值就會増加,該程序就越靠後被 cpu 處理。
修改 ni 值時有幾個注意事項:
當 linux 核心嘗試決定哪些執行中的程序可以訪問 cpu 時,其中乙個需要考慮的因素就是程序優先順序的值(也稱為 nice 值)。每個程序都有乙個介於 -20 到 19 之間的 nice 值。預設情況下,程序的 nice 值為 0。程序的 nice 值,可以通過 nice 命令和 renice 命令修改,進而調整程序的執行順序。
同 nice 命令恰恰相反,renice 命令可以在程序執行時修改其 ni 值,從而調整優先順序。
renice 命令格式如下:
[root@localhost ~] # renice [優先順序] pid
注意,此命令中使用的是程序的 pid 號,因此常與 ps 等命令配合使用。
例如:
[root@localhost ~]# renice -10 2125
#pid為2125的程序的pri值為70,而ni值為-10
如何合理地設定程序優先順序,曾經是一件讓系統管理員非常費神的事情。但現在已經不是了,如何地 cpu 足夠強大,能夠合理地對程序進行調整,輸入輸出裝置也遠遠跟不上 cpu 地腳步,反而在更多的情況下,cpu 總是在等待哪些緩慢的 i/o(輸入/輸出)裝置完成資料的讀寫和傳輸任務。 linux下調整程序 執行緒優先順序
linux下調整程序優先順序 程序的優先順序決定了程序是否優先被cpu分配資源進行處理。在cpu資源十分充足時,每個正在執行的程序都能分配到足夠的資源進行處理,此時調整程序的優先順序是沒有什麼意義的 如果cpu資源緊張時,top檢視cpu使用達到90 以上時,優先順序高的程序將被優先分配資源去執行。...
Linux程序優先順序的調整方法
linux下的程序排程優先順序是從 20到19,一共40個級別,數字越大,表示程序的優先順序越低。預設時候,程序的優先順序是0。檢視程序優先順序有兩個辦法 ps和top。top命令顯示的ni列的值。或者可以使用ps efl來檢視,也是在ni列表示了程序的優先順序。程序的優先順序可以在程式執行的時候設...
Linux程序優先順序的調整方法
linux下的程序排程優先順序是從 20到19,一共40個級別,數字越大,表示程序的優先順序越低。預設時候,程序的優先順序是0。檢視程序優先順序有兩個辦法 ps和top。top命令顯示的ni列的值。或者可以使用ps efl來檢視,也是在ni列表示了程序的優先順序。程序的優先順序可以在程式執行的時候設...