细节:
对于我开发的许多程序,我经常使用这段代码(或一些微小的变体)来“勾选”一个方法,设置为可变tps(如果设置为32,则每秒调用该方法勾选32次)。它非常重要,所以我不能将其从代码中删除,因为动画和其他各个部分都会损坏。
不幸的是,它似乎使用了相当大的cpu使用量,原因我搞不清楚。不久前,我在考虑使用线程。sleep()修复此问题,但根据
this post
; 这是相当不准确的,这使得它不可行,因为这需要合理准确的时间。
它并没有使用太多的cpu,在我公认的短期测试中,ryzen 1700的cpu约为6-11%,但考虑到它的功能非常少,它仍然需要相当多的cpu。是否有一种cpu占用较少的方法来完成此任务?或者,时机是否会不准确,无法正常使用。
public class ThreadTest {
public ThreadTest() {
int tps = 32;
boolean threadShouldRun = true;
long lastTime = System.nanoTime();
double ns = 1000000000 / tps;
double delta = 0;
long now;
while (threadShouldRun) {
now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while ((delta >= 1) && (threadShouldRun)) {
tick();
delta--;
}
}
}
public void tick() {
}
public static void main(String[] args) {
new ThreadTest();
}
}
基本总结:
上面的代码在ryzen 1700上使用了6-11%的cpu,在java中是否有办法以较少的cpu使用量完成相同的代码,并且在每秒执行一定次数的代码时保持合理的计时。