Netty学习记录-入门篇( 三 )


单 Reactor 多线程

Netty学习记录-入门篇

文章插图
在上一代的问题上进行修改 , Reactor主线程只负责响应事件 , 不做具体的业务处理 , 通过read读取数据后 , 会分发给后面的worker线程池的某个线程处理业务 。
  • 优点:充分利用多核CPU的处理能力 。
  • 缺点:多线程数据共享和访问比较复杂 , Reactor处理所有的事件监听与响应 , 在单线程运行 , 在高并发场景容易出现性能瓶颈 。
主从 Reactor 多线程针对单 Reactor 多线程模型中 , Reactor 在单线程中运行 , 高并发场景下容易成为性能瓶颈 , 可以让 Reactor 在多线程中运行 。
Netty学习记录-入门篇

文章插图
Reactor主线程MainReactor对象通过select监听连接事件 , 收到事件后 , 通过Acceptor处理连接事件 。当Acceptor处理连接事件后 , MainReactor将连接分配给 SubReactor,SubReactor将连接加入到连接队列进行监听 , 并创建Handler进行各种事件处理 。
  • 优点:父线程与子线程的数据交互简单职责明确 , 父线程只需要接收新连接 , 子线程完成后续的业务处理 , 无需返回数据给主线程
  • 缺点:编程复杂度较高 。
Reactor模式小结
  1. 单Reactor单线程 , 前台接待员和服务员是同一个人 , 全程为客户服务 。
  2. 单Reactor多线程 , 1个前台接待员 , 多个服务员 , 接待员只负责接待 。
  3. 主从Reactor多线程 , 多个前台接待员 , 多个服务生 。
Netty 模型
Netty学习记录-入门篇

文章插图
  • Netty抽象出两组线程池 , BossGroup专门负责接收客户端的连接 , WorkerGroup专门负责网络的读写 。
  • 每个worker nioEventLoop处理业务时 , 会使用pipeline(管道) , pipeline中包含了channel,即通过pipeline可以获取到对应通道 , 管道中维护了很多的处理器 。
异步模型基本介绍