如何設置高性能定時器

在工作中,我們經常會遇到定時任務的問題。一般思路:

  • 將每個任務保存到數組中,每過一個時間間隔(1秒),就檢測一下數組,看哪個任務達到了設定時間,如果到達了就取出任務執行,並刪除。

其實這樣的定時器效率是很低的,爲什麼呢?

  1. 往往到達下一個任務之間的間隔是需要很長時間,那麼在達到之前所有的檢測都是無用的,這是在浪費系統資源
  2. 如果任務列表的長度很大,那麼每次遍歷,都會消耗很多的資源。這也是不可取的。

針對該類問題,我們可以採用優先級隊列來解決。我們按照任務時間進行堆化。堆頂就是最先要被執行的任務。

修改方案:

  1. 根據任務時間進行堆化(小堆頂),堆頂任務就是下一個將要被執行的任務
  2. 計算現在距離下一個任務的時間T,sleep T秒,再執行堆頂任務。這樣在執行下一個任務之前,定時器不需要做任務事情,性能大大提高。

在這裏我只是提供了一個思路,具體如何去實現,還需要大家去自己學習堆數據結構。我的數據結構和算法的專欄中就有介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章