概述
前提:要对Reactor线程模型有比较好的理解才行。
Netty主要基于主从Reactor多线程模型做了一定的改进,传统的是一主多从,这个是Netty是多主多从,可以有多个MainReactor。
简单版

说明:
- BossGroup是MainReactor组集合,为何selector,只关注IO的ACCEPT连接事件。相当于MainReactor组。
- WorkerGroup是SubReactor组集合,关注除ACCEPT以外的IO事件,比如READ、WRITE。
- 当接收到ACCEPT事件后,得到对应的SocketChannel,并封装成NIOSocketChannel,并注册到WorkGroup的某个SubReactor中。
- 当SubReactor监听到Read事件发生后,就进行处理(由Handler),Handler已经加入到了NIOSocketChannel中。
进阶版

多个MainReactor多个SubReactor。
详细版

说明:
- Netty抽象出两组线程池,BossGroup用于专门负责接口客户端的连接,WorkGroup专门用于负责数据的网络读写。
- BossGroup和WorkerGroup的类型都是NioEventLoopGroup。
- NioEventLoopGroup相当于一个事件循环组,这个组包含多个事件循环,每一个事件循环是NioEventLoop。
- NioEventLoop表示一个不断循环的执行任务的线程,每个NioEventLoop都有一个Selector,用于监听相关事件并作出反应。
- NioEventLoopGroup可以包含多个NioEventLoop。
每个BossGroup的NioEventLoop循环做三件事:
- 轮询监听ACCEPT事件。
- 响应处理ACCEPT事件,与client建立连接,生成NIOSocketChannel,并注册到某个WorkerGroup的NioEventLoop中。
- 处理任务队列的任务,,即runAllTask。
每个WorkerGroup的NioEventLoop循环做的事情:
- 轮询监控read、write事件。
- 处理read、write事件,在各自的NIOSocketChannel里面,NIOSocketChannel封装了handler。
- 处理任务队列任务,即runAllTask。
每个WorkerGroup的NioEventLoop处理事件时,会使用pipeline(管道)来处理,pipeline封装了channel,即通过pipeline可以获取对应的channel,pipeline中维护了很多处理器handler。
该博客围绕Netty展开,需对Reactor线程模型有较好理解。Netty基于主从Reactor多线程模型改进,采用多主多从模式。介绍了简单版、进阶版和详细版,详细阐述了BossGroup和WorkerGroup的职责、NioEventLoopGroup及NioEventLoop的工作机制等。
600





