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