2011-03-08 102 views
1

哪個是更好的編寫基於Oracle的時間表是「守護程序」重複運行:無限循環或守護

  1. 被運行一次,然後是在無限循環,睡5秒,如果在一個沒有什麼可做的(不要浪費CPU週期)。

  2. 啓動的那個,檢查它是否有事要做。如果不是,則結束執行並按計劃在5秒後運行。

哪一個,你爲什麼更喜歡?或者可能是另一種實現?

回答

1

我個人更喜歡無限循環到一個計劃任務。通過無限循環,您可以看到更廣泛的交叉激活概述 - 例如,您可以非常輕鬆地計算連續/類似的失敗次數並添加錯誤恢復。

計劃的任務是有效地無狀態的,除非你手動給它的狀態(文件/ DB/???)

+0

調度程序自動計算失敗次數(如果程序確實失敗)。空閒運行(我們什麼都不做的迭代)不是失敗。同樣在無限循環解決方案的情況下,我們鎖定了很多對象(取決於計劃程序)並更新它們,我們需要停止所有守護進程。對於這樣的解決方案來說,這是一大缺點 – zerkms 2011-03-08 00:52:10

+0

然後你回答了你自己的問題。當我說失敗時,可以檢測到非0退出代碼,但是您提到了遠程資源 - 如果遠程服務器關閉,您每次運行處理多個遠程資源會發生什麼情況?如果只有3種可能的結果是成功的,沒有工作和失敗,排定的聲音就像是要走的路 – Basic 2011-03-08 10:20:24

1

這聽起來像你可能想看看使用隊列來執行處理而不是計劃任務。該進程可以阻塞隊列等待新的工作。

+0

是的,我希望這種形式的答案;-)我使用AQ當它是值得的,當它是一個很好的使用場所,但這種情況並非如此。解釋原因有點困難。用2個詞語:「守護進程」與遠程資源一起工作。 – zerkms 2011-03-08 00:32:23