[[Netty]]模型

  • 简单版:
  1. BossGroup线程维护Selector,只关注Accept事件
  2. 当接收到Accept事件,获取到对应的SocketChannel,封装成NIOScoketChannel并注册到Worker线程(事件循环),并进行维护
  3. 当Worker线程监听到Selector中通道发送自己感兴趣的事件后,就进行处理(就由Hanlder),注意handler已经加入到通道
  • 进阶版:
  1. BossGroup里面有多个NioEventLoop
  • 详细版
  1. Netty抽象出两组线程池,BossGroup专门负责接受客户端的连接,WorkerGroup专门负责网络的读写
  2. BossGroup和WorkerGroup类型都是NioEventLoopGroup
  3. NioEventLoopGroup 相当于一个事件循环组,这个组中含有多个事件循环,每个事件循环是一个NioEventLoop
  4. NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个Seletor,用于监听绑定在其上的Socket的网络通讯
  5. NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop
  6. 每个Boss NioEventLoop循环执行的步骤有3步
    1. 轮询Accept事件
    2. 处理Accept事件,与client建立连接,生成NioScoketChannel,并将其注册到某个worker NioEventLoop上的selector
    3. 处理任务队列的任务,即runAllTasks
  7. 每个Worker 的NioEventLoop循环执行的步骤
    1. 轮询Read/Write事件
    2. 处理I/O事件,即read,write事件,在对应的NioSocketChannel处理
    3. 处理任务队列的任务,即runAllTasks
  8. 每个WorkerNioEventLoop在处理业务时,会使用pipeline(管道),pipeline中包含了channel,即通过pipeline可以获取到对应的通道,管道中维护了很多的处理器