方法scheduledExecutorService.scheduleAtFixedRate()は、リアルタイムの実行を保証しない方法は?
-
19-09-2019 - |
質問
私はタイムクリティカルなタスクを毎秒実行していますので、私は私の仕事は本当に一定の時間ステップで実行されることを保証するための最良の方法を見つけるために、いくつかの方法を比較しました。それがそうである理由、それはscheduledExecutorService.scheduleAtFixedRate()
が最良の結果につながる方法を使用してのように思えるすべてのメソッドのためにエラーの標準偏差を計算した後、私は手掛かりを持っていません。
誰もがそのメソッドが内部でどのように動作するか知っていますか?どのように簡単なsleep()
と比較して参照タスクが実際に一定の時間ステップで実行されていることを確認し、それは例えばでしょうか。
解決
A '通常のJava VMは実行時間についてのハードリアルタイム保証をすることはできません(とスケジュール時間に関するものもの結果として)。あなたが本当に必要な場合は、ハードリアルタイムあなたはVMのような<のhref =「http://java.sun.com/javase/technologies/realtime/index.jsp」のrel =「nofollowをnoreferrer」リアルタイムで見ている必要があり保証します> JavaのRTS を。もちろん、あなたもそのような場合にはリアルタイムOSを必要とします。
のThread.sleep(との比較について):のThread.sleep(の(未処置)使用)と比較scheduledExecutorService.scheduleAtFixedRate()の利点は、それがスケジュールされたタスクの実行時間に影響されないことです。これが実装されている方法にScheduledFutureTask.runPeriodic()を参照してください。
他のヒント
あなたは<のhref = "http://www.jdocs.com/javase/7.b12/java/util/concurrent/ScheduledThreadPoolExecutor.html" のrel = "nofollowをnoreferrer" のOpenJDK7実装の外観を持つことができます> ScheduledThreadPoolExecutor.java のScheduledExecutorServiceインターフェースを実装する唯一のクラスである。
しかし私の知る限り正確性についてScheduledExecutorServiceで保証はあり知っているよう。だからあなたのmeasurmentsが、これはあなたが別のプラットフォーム、仮想マシンまたはJDKに切り替えた場合のケースではないかもしれないという。
acurateであることを示している場合でも、