Учитывая виртуальную машину с 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;}'
Я ожидал, что, когда я проверю с помощью top, один процесс займет весь процессор, а другой - нет (потому что времени простоя не осталось). Но...
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
Это почему? Я хочу, чтобы мой процесс скромно использовал только холостые циклы ЦП :)
Протестировано на Linux 3.5.0-17-generic # 28-Ubuntu SMP Вт, 9 октября 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux
Планирование задач - это искусство. Стандартный алгоритм планирования Linux / Unix позволяет всем процессам в какой-то момент получить CPU. Это делается путем первоначального присвоения процессу двух элементов: (1) самый низкий приоритет в его категории (как определено из его nice) и (2) приращение времени снова на основе категории приоритета. Со временем приоритет процесса увеличивается, процесс с наивысшим приоритетом получает процессорное время. Кроме того, процесс получения ЦП постоянно переопределяется от тика к тику на основе наивысшего приоритета на тот момент после перерасчета. Как только процесс получает время ЦП, его приоритет снова возвращается к самому низкому приоритету в своей категории.
Вы можете получить то, что хотели, используя приоритеты «в реальном времени», когда процессы класса с наивысшим приоритетом получают ЦП и используют его до тех пор, пока не будут удовлетворены все процессы в классе приоритета, а затем процессы в следующем более низком классе не получат доступное время, пока либо процесс с более высоким приоритетом требует ЦП, и так далее, пока не будет израсходовано общее приращение планирования ЦП. Процесс может отказаться от части приращения ЦП, тем самым вызывая перепланирование.
Таким образом, вы видите, что при использовании стандартного планировщика процесс с более низким приоритетом по-прежнему получает процессорное время, но с гораздо меньшей скоростью.