Scheduling
為什麼會有“好”的概念?
我知道什麼是“好”以及它如何映射到優先級,這不是問題。
Linux 優先級範圍為 0-139。0-99 是實時的,100-139 是使用者空間。尼斯地圖優先:
- -20 → 100
- 0 → 120
- +19 → 139
我理解好的是使用者空間,優先級是核心空間。
但是為什麼要為“好”的概念煩惱呢?這似乎是一個多餘的措施。在什麼情況下,nice 會比直接影響優先級更好?
它只是為了方便還是有技術原因?
nice(2)系統呼叫正在更改相對優先級(從該系統呼叫之前的優先級開始)。但是setpriority(2)正在改變絕對優先級。
所以我的理解是
nice(x)
(x
一個非常小的數字,例如在 0 到 9 之間)相當於原子地做:// asssume both getpriority & setpriority syscalls are successful int n = getpriority(PRIO_PROCESS, 0); n += x; setpriority(PRIO_PROCESS, 0, n);
由於多個程序可以在同一個程序上做同樣的事情(例如呼叫
setpriority(PRIO_PROCESS, somepid, n);
….),你最好有一個原子操作組合它們,這很好(2)但主要原因是遺留和歷史(以及向後兼容性)。IIRC,在 1980 年代的舊 Unix(如 SunOS3.2)中有
nice
但沒有setpriority
(但我可能錯了)。