4

我正在尝试使用 nice 运行一个使用所有处理器时间的特定进程:

sudo nice -n 20 someProcess

不幸的是,这并没有改变任何东西。在 Activity Monitor 中,它仍然固定在 99% 的 CPU 上。

我怀疑这可能是因为没有太多事情发生,所以它完全能够使用那么多时间,所以我尝试了压力测试:

是 > /dev/null & 是 > /dev/null & 是 > /dev/null & 是 > /dev/null &

即使使用 nice -n 20,有问题的进程使用了​​ 99% 的 CPU,将四个“是”进程从 99% 降低到每个进程的 60% 左右。

我应该注意,我也尝试过类似地将“nice”与一个“yes”进程一起使用,并发现它根本没有任何区别......“yes”进程使用的处理器时间与所有其他进程一样多。

这是怎么回事?“好”坏了吗?这是在 macOS 10.12.5 上完成的。

4

2 回答 2

3

不幸的是,原始海报是正确的,而 SEB 并不完全正确。

在不同的操作系统上,处理调度优先级的工作方式可能不同。

例如,在 Windows 上,如果优先级较高的进程要求足够的 CPU,则它们能够排除优先级较低的进程。例如,在四核系统上,以“正常”优先级运行的 4 个 CPU 绑定进程(或线程)可以完全排除“低于正常”或“低”优先级的 CPU 绑定进程,但“低”优先级进程可以获得如果没有其他人想要它,则 100% 的 CPU。我喜欢这种行为,因为我可以以“低”优先级运行受 CPU 限制的进程,只要我的所有其他(交互式)进程以“正常”优先级运行,我什至不会注意到它的存在。(假设没有一个进程占用太多 RAM --- 那是另一回事)。

在我使用过的所有 Unix 系统(包括 Linux)上,唯一可用的“优先级”方案是“nice”值,它比 Windows 上的系统不那么苛刻:具有高“nice”值的进程可以获得 100% CPU 没有别的东西在使用 CPU,但它们会逐渐减少 CPU 并获得更高的友好度,但它们永远不会被完全排除在外。例如,根据我的经验,如果我有一个 4 核系统和 8 个 CPU 密集型进程,那么如果它们都具有相同的不错价值,那么每个进程几乎都能获得一个内核的 50%。但是,如果 4 是非 nice 并且 4 是 nice ,那么“nice'd” 将获得越来越少的 CPU 和越来越高的 nice ,但它们永远不会完全排除:即使在 19 的最大 nice 值(或在某些系统上为 20),它们仍将获得每个内核的至少 30-40%,而非 nice 的平均获得约 60-70%。这与 Windows 不同,但仍然合理。

另一方面,据我所知,在 MacOS 上“nice”绝对没有。我有一个 4 核的 Mac,如果我运行 8 个进程,其中一半是好的......他们每个人获得的 CPU 数量绝对没有区别。这是愚蠢的。MacOS 在这里完全搞砸了,即使他们有一个“不错”的程序,即使 OS 告诉我们不错的价值是什么(“ps -l”)。在我看来,他们应该诚实并完全删除功能,或者添加功能,以便“好”的价值实际上意味着什么。

注意:如果有人能指出我错了,我会欣喜若狂,并告诉我是否有办法真正降低我想在后台运行的进程的 CPU 优先级。

于 2021-07-12T20:55:34.160 回答
0

答案是“您期望 Nice 做一些它没有做的事情”。

尼斯不是这样工作的。Nice 所做的只是改变流程的“优先级”。这意味着,如果有两个进程需要 CPU,则将“nice”的进程放在第二个位置,而不是简单地以 FIFO 方式执行进程。这些参数都是关于确定系统应该以什么顺序为处理器安排什么。

所以,如果没有其他东西在请求 CPU,那么你的“好”进程就会得到它。这意味着即使所有进程都“很好”,CPU 仍然可以 100% 运行。

如果您希望某个进程不将 CPU 推至 100%,则它必须具有内置机制以防止它不断请求执行其命令。睡眠和暂停等待用户输入等执行此操作。

于 2017-09-12T16:32:36.173 回答