程序員做彩票網(wǎng)站違法嗎競價(jià)廣告推廣
Netty中的Reactor線程
主要干三件事情:
-
輪詢注冊(cè)在
Reactor
上的所有Channel
感興趣的IO就緒事件
。 -
處理
Channel
上的IO就緒事件
。 -
執(zhí)行Netty中的異步任務(wù)。
正是這三個(gè)部分組成了Reactor
的運(yùn)行框架,那么我們現(xiàn)在來看下這個(gè)運(yùn)行框架具體是怎么運(yùn)轉(zhuǎn)的~~
這里需要注意的是netty只會(huì)自動(dòng)注冊(cè)OP_READ
事件,而OP_WRITE事件
是在當(dāng)Socket寫入緩沖區(qū)以滿無法繼續(xù)寫入發(fā)送數(shù)據(jù)時(shí)由用戶自己注冊(cè)。
這里假設(shè)一種極端情況,如果最近的一個(gè)定時(shí)任務(wù)的deadline是在未來很遠(yuǎn)的一個(gè)時(shí)間點(diǎn),這樣就會(huì)使timeoutMillis的時(shí)間非常非常久,那么Reactor豈不是會(huì)一直阻塞在Selector上造成 Netty 無法工作?
當(dāng)Reactor正在Selector上阻塞時(shí),如果此時(shí)用戶線程向Reactor提交了異步任務(wù),Reactor線程會(huì)通過execute方法被喚醒。
Reactor線程喚醒時(shí)機(jī)
Reactor運(yùn)行核心邏輯:
Reactor線程運(yùn)行時(shí)結(jié)構(gòu).png
Reactor工作流程圖.png
Reactor分配任務(wù)執(zhí)行時(shí)間.png
參考:一文聊透Netty核心引擎Reactor的運(yùn)轉(zhuǎn)架構(gòu)