我需要一个可以在 Linux 机器上运行的 exe,它可以将 CPU 加载到指定的百分比。例如,如果我以 50 作为命令行参数运行 exe,那么我的 CPU 应该加载 50%。请提供您的建议/解决方案。
答案1
简短版本:仅占用 50% CPU 的进程是不可能的(请参阅下面的替代解决方案)。
长版本:进程想要执行的所有指令都会尽快完成。进程停止运行的唯一方式是:
- 该进程超出了为其分配的时间片
- 另一个进程通过抢占式调度算法获得更高的优先级,从而将原始进程从 CPU 中弹出。(中断也会发生这种情况)
- 进程被阻塞(主要是由于等待 I/O 导致的)
您在 Windows 任务管理器中看到的 CPU 百分比top
是过去 x 时间内 CPU 繁忙程度的平均值。但是,CPU 始终全速运行,因此 1 秒内 50% 的使用率意味着 500 毫秒内 CPU 在运行代码,500 毫秒内 CPU 处于休眠状态。
解决方案
Linux 上有一个叫做的工具cpulimit
。你可以像这样使用它:
cpulimit -p 1313 -l 30
这将限制 PID 1313 的 CPU 使用率最高为 30%。根据网站,其工作原理如下:
cpulimit 的工作全部在用户空间中完成,因此它不会干扰 Linux 调度程序。基本上,目标进程(您可以通过 pid、名称或命令行指定)会通过向其发送 SIGSTOP 和 SIGCONT 信号不断暂停和恢复。cpulimit 会根据用户指定的限制和从 /proc 读取的进程统计信息在适当的时刻发送信号。