如何每秒做n次?
回答
对于每秒20K次,您需要忙于等待下一个时间间隔。我建议等到下一次它应该运行以消除抖动的影响。
long start = System.nanoTime();
long rate = 20000;
for(long i = 0; ; i++) {
// do something
long end = start + i * 1000000000L/rate;
while(System.nanoTime() < end);
}
不能使用内置在调度的原因是最小时间片为100微秒,这是每秒10K倍,在许多平台最小休眠时间为1毫秒。
在非实时操作系统中,使用此技术几乎不可能实现每秒20000次重复。 –
它会在while循环中对Thread.yield()有利吗?或者,这可能会导致等待时间过长,因为没有及时安排(在您称之为“抖动”时增加)? – Cruncher
@StefanoSanfilippo它尽可能地接近你。如果你还隔离了CPU,你将得到小于20微秒的抖动。 –
这取决于你在做什么,例如,如果你正在做一些网络,你试图做一些连接,它将取决于连接超时和其他一些因素。如果您正在执行一些基本操作,您将能够控制操作的上限,例如每秒最多20次操作,但由于pc.So中正在运行的其他任务,您将永远无法控制下限。它真的取决于你在做什么,你正在运行的硬件(特别是处理器)以及该计算机的bussy。
如果您正在实施一个需要固定时间间隔执行的控制系统,并且您想用Java实现它,请阅读real-time Java。
如果您只需要重复执行某些操作并且毫秒级粒度足够,请查看Timer或ScheduledThreadPoolExecutor。
如果您需要更精细的粒度(即每秒超过1000次),但您并不严格要求您的代码以精确的时间间隔执行,那么您可能会得到Peter Lawrey的忙碌解决方案。
听起来像来自Guava的RateLimiter的完美工作。
编辑
有一个一目了然成RateLimiter
的FPGA实现 - 好,对于如此高的速率并不是一个理想的人选,因为递增它采用同步块和睡觉计数器。但是,如果可以更改粒度,应该没问题,即将您的20.000
分成100
个包,每个包包含200
个项目。
- 1. 如何让每N秒
- 2. 每隔n秒做一次没有while循环的事情?
- 3. JavaScript - 每n秒做一件事
- 4. 每n秒唤醒一次线程
- 5. 每隔n秒复制一次
- 6. 做代码60次每秒C++
- 7. 如何每N秒安排一次ajax呼叫?
- 8. 如何使用每N秒更改一次NSString的值?
- 9. 如何每隔N秒刷新一次网页的一部分
- 10. 如何每n秒执行一次函数?
- 11. 如何在imageview中每n秒钟更改一次图像
- 12. 如何每n秒运行一次耗时的过程?
- 13. 我如何每n秒运行一次jQuery load()请求?
- 14. 如何做,但不是每3秒更多一次
- 15. 如何更新RecyclerView,让每个项目每N秒出现一次?
- 16. 击:增加每列n秒
- 17. 更新每n秒QLineEdit值
- 18. 如何打印每秒迭代次数?
- 19. 如何每5秒刷新一次webview
- 20. 如何衡量“每秒查询次数”?
- 21. 如何每秒启动一次intent ACTION_TIME_TICK?
- 22. 如何每5秒发送一次HttpPost
- 23. 每2秒启动一次,每5秒启动一次
- 24. 在x分钟再做一次事情,然后每隔n分钟做一次
- 25. 如何在winform上每隔n秒更新一次标签控件?
- 26. 如何检查Internet连接是否每隔n秒开启一次?
- 27. 如何从活动中每N秒更新一次Android TextView元素?
- 28. 在JavaScript中每隔N秒调用一次异步函数
- 29. Java Timer在每t秒后n次调用函数
- 30. while循环中每隔n秒刷新一次异步页面
将您的任务交给'ScheduledExecutorService'执行。 –
我们需要更多信息。当任务'n'超支时会发生什么?同时运行两个任务还是等待? –
每秒做19,999次,稍微加快。 –