gpt4 book ai didi

java - 在 Java 中生成 CPU 负载

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:52 26 4
gpt4 key购买 nike

我正在进行一些吞吐量测试。我的申请必须

  1. 从 JMS 读取
  2. 做一些处理
  3. 写入JMS

我的目标是模拟#2,“一些处理”。即在转发事件之前引入延迟并占用 CPU 给定时间(例如 500ms)。

天真的方法是 Thread.sleep(500)。这会在执行中引入正确的延迟,但不会使用 CPU。

计算斐波那契数列是一种选择。有没有人使用过任何有趣的技术来让 CPU 在给定时间内保持忙碌?

理想的特征是:

  • 执行各种指令,而不是(例如)只是循环旋转
  • HotSpot 虚拟机不会优化到什么都没有
  • 有一种简单的方法来调整处理周期(完成时间会因硬件而明显不同)

最佳答案

你可以尝试一些简单的事情

private static void spin(int milliseconds) {
long sleepTime = milliseconds*1000000L; // convert to nanoseconds
long startTime = System.nanoTime();
while ((System.nanoTime() - startTime) < sleepTime) {}
}

测试:

public static void main(String[] args) {
final int NUM_TESTS = 1000;
long start = System.nanoTime();
for (int i = 0; i < NUM_TESTS; i++) {
spin(500);
}
System.out.println("Took " + (System.nanoTime()-start)/1000000 +
"ms (expected " + (NUM_TESTS*500) + ")");
}

我的输出:

$ java SpinTest
Took 500023ms (expected 500000)

所以循环没有得到优化(是的,我将我的 CPU 提高到 100% 八分钟只是为了测试这个:))。

关于java - 在 Java 中生成 CPU 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/382113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com