如何每秒做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次,稍微加快。 –