2013-07-29 50 views
0

使用輪詢系統或基於事件的定時器,更快和「更好的做法」是什麼?使用基於事件的定時器與輪詢的性能考慮

我目前正在與更高級的同事討論如何實現一些任務關鍵邏輯。情況如下:

  • 接收到給出執行時間的消息。
  • 當達到執行時間時,必須執行一些邏輯。
  • 現在可以接收多個消息,給出不同的執行時間,並且邏輯必須每次執行。

我認爲實現邏輯的最好方法是創建一個計時器,當消息在消息中時觸發邏輯,但我的同事認爲我會更好地輪詢列表看看是否已經達到執行時間。

他的觀點是投票系統更安全,因爲它不那麼複雜,因此不太可能被程序員搞砸。我的觀點是,通過以我的方式實現它,我們減少了計算負擔,從而更有可能在我們真正需要它執行時執行邏輯。我應該如何實現它,爲什麼?


請求的信息

  • 我的邏輯都不會被利用幾乎肯定會在最高負載的時間只有一次。
  • 該要求並未指定連接的可靠程度,但我曾與之交談過的每個人均聲明,他們從未聽說過丟失的消息。
  • 調度基於絕對系統。所以,這個消息會有一個執行時間,指定何時應該執行一個算法。由於時間同步,我被指示假設所有機器的時間都是一致的。
  • 獲得執行的算法使用一些輸入,它們最初是不穩定的,但很快穩定下來。通過推遲處理,我希望能夠使用最穩定的信息。
+0

你能告訴我們更多關於它有多重負荷嗎?每秒多少個任務?每項任務需要多長時間? – hexafraction

+1

我相信'事件驅動'幾乎總是首選'輪詢',這可能會消耗CPU時間。此外,「事件驅動」更靈活,可以更容易地根據您的需求進行定製。 – Houdini

+0

@Houdini作爲一個經驗法則,你可能是對的,但它一如既往:一個需求的問題。也許你的事件/消息是通過不可靠的連接發送的。在這種情況下,你不能100%確定一個重要的信息不會丟失。投票可能會幫助你顯示這些問題,也許你可以做些事情來治癒這種情況。當然,事件處理和輪詢可以組合成混合解決方案。 – user573215

回答

1

java.util.Timer有效地做你的同事的建議(真相被告知,最後,真的沒有太多的方法來做到這一點)。

它維護一個TimerTasks的集合,它等待它的新活動,或者直到執行下一個任務的時候。它不輪詢集合,它「知道」下一個任務將在N秒內觸發,並等待直到發生此事或其他任何事情(例如添加或刪除了TimerTask)。這比投票更好,因爲它大部分時間都在睡覺。

所以,最後,你們都是對的 - 你應該使用Timer來做這件事,因爲它基本上做你的同事想做的事情。