我正在尝试在 Mac 上测试该renice
命令,但似乎没有效果。这就是我测试它的方式:
我有一个具有超线程功能的双核 CPU,因此我运行了 6 个实例node -e 'while(1){}'
,这些实例加起来就耗尽了我的 CPU。 (或者,while true; do echo running > /dev/null ; done
如果没有节点,则运行。)
然后,我通过活动监视器应用程序或 获取节点进程之一的 PID pgrep
,然后运行sudo renice -n 19 -p $PID
。
通过查看活动监视器应用程序 或htop
,所有节点进程的 CPU 使用率仍然相等:
我的理解是,我的进程renice
优先级较低,因此当有其他进程使用它时,不会使用大量的 CPU 时间。
我是否误解了什么renice
?或者这是 macOS 中的一个错误?
答案1
运行一些基本测试我也在 10.13.4 上看到了这一点。
我编写了一个名为 Looper 的小型 C 程序,它在无限循环中执行一些基本数学运算:
#include <stdio.h>
int main(){
unsigned long long prev = 0;
unsigned long long current = 1;
unsigned long long total = 0;
while(1){
total = current + prev;
prev = current;
current = total;
printf("%llu\n", total);
}
}
我在我的 FreeBSD 机器上运行了多个副本,并使用htop(1)
.使用renice(8)
我可以看到 Nice 值正在增加,Priority 值正在增加,CPU 百分比正在减少——这是预期的行为。
我在 macOS 10.13.4 上运行相同的程序并重复该过程。虽然我可以看到 Nice 值在增加,但优先级值和 CPU 百分比保持一致。
我想知道这是否是一个错误,我之前没有理由如此仔细地观察 macOS 中的 Nice 值 - 该行为已经足够接近我的预期,因此我并没有倾向于调查。
如果您有开发者帐户,则值得向 Apple 报告此情况。