我想通过一个java程序增加我的CPU使用率,尽管是以一种受控的方式。比如说,用户可以指定一个参数,如“高”、“中”或“低”,我应该能够根据用户的选择将 CPU 增加一定数量。假设高我希望它增加 5%,中等增加 3%,低增加 1%。这是否可以通过一种干净有效的方法(不仅仅是使用 while 和 for 循环)来实现?如果是,那么精确度和准确度如何以及如何?
提前致谢
您可以通过在代码中插入 sleep 语句(例如 )来修改 Java 程序引起的 CPU 负载Thread.sleep()
,使用可变延迟来更改负载。最简单的情况是循环中的 sleep 语句,在要加载的每个 CPU 内核的单独线程中执行。
也就是说,Java不适合这项任务 - 如果您确实需要您所描述的那种精度,则不适合。垃圾收集器和其他因素使其行为相当不可预测。
在我自己的应用程序中,对于相同的输入,我经常会得到 10% 范围内的吞吐量变化,而没有明显的原因。正是由于这个原因,Java 也不被认为适用于实时应用程序。
如果你提到你需要做这样的事情的目的,它可能会帮助我们提供更好的答案——也许,为什么你需要在Java中做......
编写一个只有一个线程的 java 程序,也就是说,在你的 main 方法中创建一个无限的 while 循环,它会一直执行。你会发现CPU使用率会增加。如果您在此 while 循环中没有任何睡眠,您会发现您的程序将占用几乎 100% 的 CPU。您在此 while 循环中放置的睡眠越多,您的程序占用的 CPU 使用率就越少。
CPU 使用率由底层操作系统控制。操作系统将确定执行给定任务所需的 CPU 使用率。由于 CPU 使用率是由操作系统控制的,因此无法直接通过 java 控制。
您唯一能做的就是更改线程优先级以间接控制 CPU 使用率,或者您可以让线程休眠一段时间。