AMPS:定時器管理

來源:互聯網
上載者:User

  定時器模組是協議伺服器的關鍵組件之一,幾乎每個協議軟體都設計有逾時機制。在多線程的軟體中,定時器的最大問題是去除了非同步,這使得保護每個會話相關的資料結構變得不可避免。APMS提供了基本的定時器管理API,主要的設計目標如下:

  •  定時器實現必須高效,在定時器相關的任何操作中不應該有尋找或排序。且啟動、停止、逾時處理必須的時間複雜度必須為O(1)。
  •  定時器實現必須可測量,必須支援長時間的逾時(至少支援24小時或更長),且佔用記憶體小。
  •  定時器回呼函數必須串列調用,以避免維護共用工作階段相關的資料結構。
  •  定時器必須精確。
  AMPS的定時器實現滿足了以上所有目標,下面描述它的設計:
  •   AMPS的定時器模組
  AMPS將定時器視為高優先順序的事件,時鐘滴答事件每k毫秒產生一次,k為定器模組的最小計時單位,預設為1毫秒。系統中有一個高優先順序的線程(優先順序高於主迴圈線程、I/O代理、CPU代理),這個線程休眠k毫秒後,會喚醒並通過IPC機制向主程式發送一個事件,然後繼續休眠k毫秒。主程式的事件管理器以高於系統中其他事件的優先順序來處理這一個時鐘滴答事件。並且處理完任何事件後,它都會檢查時鐘滴答事件來判斷是否此事件處理超過了k毫秒,這種方法可以保證時鐘滴答事件不用等待其他事件的處理。並且可以判斷系統中有哪些事件處理超過了k毫秒,這樣應用程式開發人員就可以發現這樣的事件處理控制代碼,並將它拆分成多個小於k毫秒的事件,定時器提供了一個API,允許使用者指定一個回呼函數以及一個作為參數傳入的指標。 
  • 定時器資料結構
  定時器的資料結構包含了按層級劃分的數組,每一個表示一個數字時鐘的記數器,這與Linux Kernel中的定時器實現概念一樣,AMPS中有四個這樣的數組,第一個數組表示毫秒,每一個元素代表一個tick或k毫秒,這個數組共有1000/k個元素,這也表示這個數組表示一秒的時間,也暗示了毫秒部分的逾時必須是k毫秒的倍數。第二個數組表示秒,有60個元素,表示一分鐘的時間。同樣地,第三個數組表示分鐘,也有60個元素,表示一小時的時間。最後一個數組代表小時,有24個元素,表示一天的時間。  每個數組的每一個元素是一個由定時器回呼函數組成的雙鏈表,每產生一個tick事件,tick事件控制代碼會遍曆當前數組元素所儲存的鏈表,依次調用每一個回呼函數,並且將數組下表加1,當毫秒數組達到結尾,事件處理控制代碼通過當前秒鐘數組所在下標的回呼函數來填充毫秒數組的所有元素,並且將秒鐘數組下表加1,此時秒鐘數組元素中的回呼函數等等待下一秒到來時更新,事件控制代碼開始增加秒鐘數組,同樣,當秒鐘數組達到結尾時,事件控制代碼用當前分鐘數組下表所在元素的回呼函數來填充秒鐘數組的所有元素,其他數組原理一樣。這樣,毫秒數組下標每一個tick加1,秒鐘數組下標每一秒加1,分鐘數組下標每一分鐘加1,小時數組下標每小時加1。注意,回呼函數的執行都在毫秒數組中。  定時器機制如所示:     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.