在C++中限制CPU使用率

3
有没有办法在C++中限制CPU使用率?
我的意思是,我能否编写一个程序,输入要使用的%CPU,并使用最大的CPU数量。
我基本上想在程序内部添加cpulimit命令的功能。
如果有的话,如何实现?
编辑:
环境:Linux(debian)带有gcc 6.1。它应该支持尽可能多的任意数字。即1%-100%的范围。如果操作系统无法执行,则可以记录错误并使用最接近的值或使用操作系统建议的任何其他解决方案来限制该数字。

2
回答你提出的问题:是的,有一种方法可以做到这一点。 - undefined
@SamVarshavchik 我猜现在我已经编辑了问题,你可以告诉我如何可能实现这个吗? - undefined
什么操作系统? - undefined
@RaymondChen 使用gcc的Linux系统 - undefined
@KrisVandermotten我已经修改了问题,添加了关于操作系统的详细资料。 - undefined
显示剩余2条评论
2个回答

2
Linux没有提供设置特定百分比的手段。但是,nice(2)系统调用可以降低进程相对于系统上其他进程的优先级,从而实现与系统上其他进程相对CPU百分比的某种程度的控制。
您还可以使用setrlimit(2)系统调用来设置进程的RLIMIT_CPU作为固定数量。

1
这是以秒为单位的限制,而不是百分比。 - undefined
RLIMIT_CPU只提供时间限制,我更想控制每个进程在top中显示的CPU%。 - undefined
但是如果Linux没有提供任何这样的功能,那么cpulimit是如何工作的?cpulimit命令似乎可以很好地限制进程的%CPU使用率。 - undefined
由于cpulimit的源代码是免费提供的,你可以自己查看并了解。我只是简单地浏览了一下,它是一个启发式算法,使用SIGSTOPSIGCONT手动暂停和恢复每个进程。这不是Linux内核的特性,而是一种启发式的速率限制实现。你可以通过定期检查/proc,查看你的进程已经消耗了多少CPU时间,然后手动使用sleep()函数休眠相同的时间段,以达到目标50%的CPU利用率,例如。 - undefined

2

现在看来很有道理,因为Linux内核没有提供任何这样的功能。我可以做这样的事情。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接