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