在寫這一篇的時候,忽然回想到退伍後的第一份工作,在中華電信帳務機房裡當OP(系統操作員),這個工作主要內容除了接聽各營業據點的重置電話(終端機當機時需要 reset)、換磁帶以外,調整 job 的優先權是一項極重要的工作,各位可別小看了這項看似不起眼的工作,在帳務機房裡的大型主機裡,CPU Loading 常常是 100%,執行中的 job 經常是5~60支以上,而這些 job 執行時間短的可以是5秒以下,長的可以跑將近一天,而每天要跑的程式大同小異,但有時候會跑一些新方案的計算,所以把所有的工作在當天完成是基本的需求。如果今天跑不完,又累積到明天,會造成惡性循環,最好的情況是在周未可以跑完,最差的情況是所有的 job 全部在等該 job 釋放資源(或是等該 job 的結果)。
所以在一個高負載的 Unix 主機中,調整系統優先權(Priority) 可說是非常重要的一部份,而調整的結果也關係到能不能及時的完成工作,空出更多的 cpu time 來處理其他的 job(或是說釋放出資源給其他 job)
對於一個尚未執行的工作,我們可以用 nice 來指定其優先權
對於一個己經執行的工作,我們則用 renice 來指定優先權
其中的 15 則是指 Nice 值,系統中的 Nice 值可以從 -20 ~ 20,一般的 user 可以調整的範圍從 0 ~ 20,只有 super 可以指定 -20 ~ 0 的值,這個數值越低,則系統優先權越高,反之優先權越低。
對於越重要、需快速處理的工作,我們可以將他的Nice 值調低,以獲得更高的優先權。
當然,這個觀念也可以在目前的 Windows 上應用。