|
|
||||||||||||||||||||||||||||
DIO216時間輪可參考時鐘進行理解,秒針(Seconds wheel)轉一圈,則分針(Minutes wheel)走一格,分針(Minutes wheel)轉一圈,則時針(Hours wheel)走一格。隨著,時間的流逝,任務不斷從上層流下下一層,最終到達秒針輪上,當秒針走到時執行。
如上所示,時間輪大小為8格,秒針1s轉動一格,其每一格所指向的鏈表保存著待執行任務。比如,如果當前指針指向1,要添加一個3s后執行的任務,由于1+3=4,即在第4格的鏈表中添加一個任務節點即可。如果要添加一個10s后執行的任務,10+1=11,超過了秒針輪范圍,因此需要對8取模11 % 8 = 3,即,會把這個任務放到分針輪上3對應的鏈表上,之后再從分針輪把任務丟到秒針輪上進行處理。也即,**秒針輪(Seconds wheel)**即保存著最近將要執行的任務,隨著時間的流逝,任務會慢慢的從上層流到秒針輪中進行執行。
優點:加鎖粒度較小,只需要加一個格子即可,一個格子對應一串鏈表;適合高并發場景
缺點:不好刪除
這里介紹兩種定時器實現方案,一種是簡單實現方案,另一種是skynet較為復雜的實現。
DIO216
DIO216