Netty工作原理图
- netty抽象出了两组线程池,BossGroup专门负责客户端 的连接,WorkerGroup专门负责网络读写。
- BossGroup和WorkerGroup 类型都是NioEventLoopGroup
- NioEventLoopGroup相当于一个事件循环组,这个组中含有多个事件循环,每一个事件循环是一个NioEventLoop
- NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,用于监听绑定在其上socket网络通信
- NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop
- 每个Boss对应的NioEvenetLoop都会执行以下三步:
- 轮询accept事件,
- 处理accept事件,与client建立socket连接,生成NioSocketChannel,并将生成的NioSocketChannel注册到某个worker NioEventLoop上的selector上。
- 处理任务队列中的任务,即runAllTasks
- 每个worker NioEventLoop循环执行步骤:
- 轮询read/write事件
- 处理io事件,即read ,write事件,在对应的NioSocketChannel处理
- 处理任务队列中的其它任务
- 每个worker NioEventLoop会使用PipeLine管道处理,PipeLine中包含了Channel,即通过PipeLine可以获取对应的Channel, 管道中维护了很多的处理器Handler
-----------------------------------------
NioEventLoop表示一个不断循环处理任务的线程,而且每个NioEventLoop都有一个selector,用于监听绑定在其上的socket网络通道
NioEventLoop内部采用串型化设计,从消息的读取----> 解码----> 处理--------> 编码------>发送, 始终于IO线程的NioEventLoop负责
- NioEventLoopGroup下包含多个NioEventLoop
- 每个NioEventLoop包含一个Selector, 一个taskQueue
- 每个NioEventLoop的selector上可以注册监听多个NioChannel
- 每个NioChannel只会绑定在唯一的NioEventLoop上
- 每个NioChannel都会绑定一个自己的ChannelPipeLline
异步模型
Future-Listener机制
Future说明:
- 表示异步执行结果,可以通过它提供的方法来检测执行是否完成,比如检测计算等
- ChannelFuture接口:我们可添加监听器,当监听的事件发生时,就会通知到监听器
日拱一卒无有尽,功不唐捐终入海