1. 程式人生 > >Muduo網路庫原始碼分析(二) 定時器TimeQueue,Timer,TimerId

Muduo網路庫原始碼分析(二) 定時器TimeQueue,Timer,TimerId

首先,我們先要明白為什麼需要設計這樣一個定時器類?

在開發Linux網路程式時,通常需要維護多個定時器,如維護客戶端心跳時間、檢查多個數據包的超時重傳等。如果採用linux的SIGALARM訊號實現,則會帶來較大的系統開銷,且不便於管理

Muduo 的 TimerQueue 採用了最簡單的實現(連結串列)來管理定時器,它的效率比不上常見的 binary heap 的做法,如果程式中大量(10 個以上)使用重複觸發的定時器,或許值得考慮改用更高階的實現。由於目前還沒有在一個程式裡用過這麼多定時器,暫時也不需要優化 TimerQueue。

(一)定時函式的選取

定時函式,用於讓程式等待一段時間或安排計劃任務:  
sleep   
alarm   
usleep   
nanosleep   
clock_nanosleep   
getitimer / setitimer   
timer_create / timer_settime / timer_gettime / timer_delete   
timerfd_create / timerfd_gettime / timerfd_settime