我有一個客戶端應用程序,其中runnable必須在修復期運行。因此,我使用java.util.concurrent.ScheduledExecutorService
如下:java.util.concurrent.ScheduledExecutorService運行非常不頻繁
ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(10);
ScheduledFuture scheduledFuture =
scheduledExecutorService.scheduleAtFixedRate(runnableClass,
period,period,TimeUnit.SECONDS);
只要工作量爲低時,任務被調度在定義的時間段,即,如果客戶端從服務器接收任何消息。但是,如果服務器以全速度拍攝消息,則不會按時執行runnableClass.run()
。我覺得執行之間的時間呈指數級增長。但電腦仍然運行平穩。
所有Exceptions
都在run()
之內,如果我減少了從服務器發送的消息,則會更頻繁地調度該任務。
爲什麼會發生這種情況?
編輯:任務需要大量的資源,它使用Rserve
獲得在R
計算出的預測。在一項任務中,可能多達5000個呼叫R
。
我做了一些關於任務時間的測試。任務總是在一秒之內完成,而時間在3到20秒之間。
您能詳細描述一下計劃任務的特點嗎? CPU或I/O綁定?共同資源?平均執行時間? – laune
那麼有多少Rserve服務器?這看起來像一個資源給我,你可能會爭論。並行比Rserve服務器多的線程是沒有意義的。 - 另外我現在在我的頭盔上有什麼「全速」的意思,但是每分鐘有多少請求是在你的速度計上?以固定速率進行調度不是處理許多任務的最佳答案,它可能會避免同步問題。我不想苛刻,但是你有沒有徹底檢查過你的設計? – laune
消息的處理不與任務耦合,該任務應該以固定速率運行。這個想法是使用固定費率任務來批量處理傳入消息流。因此收集消息的相關信息並以固定的速率處理。否則,儘管要使用批處理。 – 7morgen