为什么我的“好”级别不反映在CPU使用率?

给定1个CPU的虚拟机。 我在两个terminal上运行两个类似的CPU密集型任务:

/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进程将采取所有的CPU和其他没有(因为没有空闲时间)。 但…

  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周期:)

testing在Linux 3.5.0-17-generic#28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux

在任务调度中使用“艺术”。 标准的Linux / Unix调度algorithm允许所有进程在某一时刻获得CPU。 这是通过最初完成的,分配一个过程两个项目:(1)在其类别中的最低优先级(根据其良好确定)和(2)基于优先级库存再次进行时间增量。 随着时间的推移,进程优先级得到增加,最高优先级进程获得CPU时间。 另外,在重新计算之后,获取CPU的过程将根据当时的最高优先级从tick到tick不断重新确定。 一旦进程获得CPU时间,其优先级将再次返回到其类别中的最低优先级。

通过使用“实时”优先级,您可以获得所需的优先级,其中最高优先级的类进程获取CPU并获得使用,直到优先级类中的所有进程得到满足,然后下一个较低类的进程获得可用时间,直到优先级较高的进程需要CPU等等,直到总CPU调度增量用完为止。 一个进程可以放弃部分CPU增量,从而导致重新计划。

因此,在使用标准调度程序时,您看到的优先级较低的进程仍然占用CPU时间,但速度却很低。