netty模型简介

Netty工作原理图

  

  1. netty抽象出了两组线程池,BossGroup专门负责客户端 的连接,WorkerGroup专门负责网络读写。
  2. BossGroup和WorkerGroup 类型都是NioEventLoopGroup
  3. NioEventLoopGroup相当于一个事件循环组,这个组中含有多个事件循环,每一个事件循环是一个NioEventLoop
  4. NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,用于监听绑定在其上socket网络通信
  5. NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop
  6. 每个Boss对应的NioEvenetLoop都会执行以下三步:
    1. 轮询accept事件,
    2. 处理accept事件,与client建立socket连接,生成NioSocketChannel,并将生成的NioSocketChannel注册到某个worker NioEventLoop上的selector上。
    3. 处理任务队列中的任务,即runAllTasks
  7. 每个worker NioEventLoop循环执行步骤:
    1. 轮询read/write事件
    2. 处理io事件,即read ,write事件,在对应的NioSocketChannel处理
    3. 处理任务队列中的其它任务
  8. 每个worker NioEventLoop会使用PipeLine管道处理,PipeLine中包含了Channel,即通过PipeLine可以获取对应的Channel, 管道中维护了很多的处理器Handler

-----------------------------------------

NioEventLoop表示一个不断循环处理任务的线程,而且每个NioEventLoop都有一个selector,用于监听绑定在其上的socket网络通道 

NioEventLoop内部采用串型化设计,从消息的读取----> 解码----> 处理--------> 编码------>发送, 始终于IO线程的NioEventLoop负责

  1. NioEventLoopGroup下包含多个NioEventLoop
  2. 每个NioEventLoop包含一个Selector, 一个taskQueue
  3. 每个NioEventLoop的selector上可以注册监听多个NioChannel
  4. 每个NioChannel只会绑定在唯一的NioEventLoop上
  5. 每个NioChannel都会绑定一个自己的ChannelPipeLline

异步模型

Future-Listener机制

Future说明:

  1. 表示异步执行结果,可以通过它提供的方法来检测执行是否完成,比如检测计算等
  2. ChannelFuture接口:我们可添加监听器,当监听的事件发生时,就会通知到监听器
原文地址:https://www.cnblogs.com/z-qinfeng/p/11968279.html