先吐個(gè)槽战转,不喜勿噴搜立,最近非常想換工作,在目前這家公司待的還不滿一年槐秧,為什么想離職呢儒拂?年前加了半年的班幾乎每天都是九點(diǎn)多才下班,有時(shí)候周末也要來(lái)色鸳,但是很少有人有年終社痛,大部分就是12薪,mmp命雀,這時(shí)候肯定想走蒜哀,但是還是想待滿一年之后,想換工作的直接導(dǎo)火索,年前公司分產(chǎn)品線撵儿,被別的部門領(lǐng)導(dǎo)給選了過(guò)去乘客,直接上司呢是個(gè)傻逼,什么都不會(huì)就知道瞎逼逼淀歇,給別人說(shuō)話很不耐煩的易核,為什么能當(dāng)上領(lǐng)導(dǎo)和上級(jí)關(guān)系好唄!這時(shí)候要么忍要么滾浪默,所以就打算滾了牡直,目前公司很多人在找工作。纳决。碰逸。
上篇文章說(shuō)到HashedWheelTimer結(jié)構(gòu)是個(gè)數(shù)組+鏈表,而kafka TimingWheel結(jié)構(gòu)也是個(gè)數(shù)組+鏈表阔加,區(qū)別呢HashedWheelTimer只有一個(gè)輪(一個(gè)數(shù)組)饵史,而TimingWheel是多輪(多數(shù)組)。TimingWheel結(jié)構(gòu)是由DelayQueue(這個(gè)實(shí)質(zhì)上是object數(shù)組胜榔,最外層的輪)+buckets(數(shù)組+TimerTaskList)組成胳喷,如下圖
kafka?TimingWheel源碼解析也是一坨,不多說(shuō)這個(gè)了夭织,想說(shuō)下kafka和netty時(shí)間輪的一些區(qū)別厌蔽,kafka的時(shí)間輪獲取下一輪時(shí)間數(shù)據(jù)采用了DelayQueue.poll(timeoutMs, TimeUnit.MILLISECONDS)(這個(gè)源碼在Timer.advanceClock),這樣做的優(yōu)點(diǎn)當(dāng)有數(shù)據(jù)加入到這一輪的時(shí)候直接獲取數(shù)據(jù)即可,而netty?HashedWheelTimer采用的是sleep摔癣,當(dāng)有數(shù)據(jù)加入到這一輪的時(shí)候奴饮,它會(huì)自動(dòng)把數(shù)據(jù)加入到下一個(gè)數(shù)組內(nèi),而不是喚醒择浊,喚醒可能會(huì)出問(wèn)題戴卜,相對(duì)有一定延時(shí)。kafka?TimingWheel多數(shù)組(多輪)琢岩,netty?HashedWheelTimer單數(shù)組(一輪)投剥,假如有多輪數(shù)據(jù)的時(shí)候,netty會(huì)把多輪的數(shù)據(jù)給個(gè)標(biāo)識(shí)加入到單輪的鏈表里担孔,造成不便的遍歷江锨。如下圖