Netty中的Reactor线程
主要干三件事情:
-
轮询注册在
Reactor
上的所有Channel
感兴趣的IO就绪事件
。 -
处理
Channel
上的IO就绪事件
。 -
执行Netty中的异步任务。
正是这三个部分组成了Reactor
的运行框架,那么我们现在来看下这个运行框架具体是怎么运转的~~
这里需要注意的是netty只会自动注册OP_READ
事件,而OP_WRITE事件
是在当Socket写入缓冲区以满无法继续写入发送数据时由用户自己注册。
这里假设一种极端情况,如果最近的一个定时任务的deadline是在未来很远的一个时间点,这样就会使timeoutMillis的时间非常非常久,那么Reactor岂不是会一直阻塞在Selector上造成 Netty 无法工作?
当Reactor正在Selector上阻塞时,如果此时用户线程向Reactor提交了异步任务,Reactor线程会通过execute方法被唤醒。
Reactor线程唤醒时机
Reactor运行核心逻辑:
Reactor线程运行时结构.png
Reactor工作流程图.png
Reactor分配任务执行时间.png
参考:一文聊透Netty核心引擎Reactor的运转架构