Scheduling

為什麼會有“好”的概念?

  • June 24, 2015

我知道什麼是“好”以及它如何映射到優先級,這不是問題。

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(但我可能錯了)。

引用自:https://unix.stackexchange.com/questions/211850