На этот вопрос уже есть ответ здесь:
Дана виртуальная машина с 1 процессором. Я запускаю две одинаковые задачи с интенсивным процессором в двух терминалах:
/usr/bin/nice -n -20 perl -e 'while(1){$a=1+1;}'
/usr/bin/nice -n 19 perl -e 'while(1){$a=1+1;}'
Я бы ожидал, что при проверке сверху, 1 процесс займет весь процессор, а другой нет (потому что не осталось времени простоя). Но...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18175 root 1 -20 20376 1460 1132 R 49.9 0.1 0:18.36 perl
18176 root 39 19 20376 1460 1132 R 49.9 0.1 0:15.16 perl
Почему так? Я хочу, чтобы мой процесс скромно использовал только незанятые циклы CPU :)
Проверено на Linux 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 x86_64 GNU/Linux
В планировании задач используется «искусство». Стандартный алгоритм планирования Linux / Unix позволяет всем процессам в какой-то момент получить CPU. Это делается путем первоначального присвоения процессу двух элементов: (1) самый низкий приоритет в его категории (как определено из его nice) и (2) приращение времени снова на основе категории приоритета. Со временем приоритет процесса увеличивается, процесс с наивысшим приоритетом получает процессорное время. Кроме того, процесс получения ЦП постоянно переопределяется от тика к тику на основе наивысшего приоритета на тот момент после перерасчета. Как только процесс получает время ЦП, его приоритет снова возвращается к самому низкому приоритету в своей категории.
Вы могли получить то, что хотели, используя приоритеты "в реальном времени", где процессы класса с наивысшим приоритетом получают ЦП и могут использовать его до тех пор, пока не будут удовлетворены все процессы в классе приоритета, затем процессы в следующем более низком классе получают доступное время, пока процесс с более высоким приоритетом не потребует ЦП, и так далее, пока общее приращение планирования ЦП израсходовано. Процесс может отказаться от части приращения ЦП, тем самым вызывая перепланирование.
Таким образом, вы видите, что при использовании стандартного планировщика процесс с более низким приоритетом все еще получает процессорное время, но с гораздо меньшей скоростью.