单 Reactor 多线程

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

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

文章插图
- Netty抽象出两组线程池 ,
BossGroup
专门负责接收客户端的连接 ,WorkerGroup
专门负责网络的读写 。
- 每个
worker nioEventLoop
处理业务时 , 会使用pipeline
(管道) ,pipeline
中包含了channel
,即通过pipeline
可以获取到对应通道 , 管道中维护了很多的处理器 。
- 异步的概念和同步相对 。当一个异步过程调用发出后 , 调用者不能立刻得到结果 。实际处理这个调用的组件完成后 , 通过状态、通知和回调来通知调用者 。
- Netty中的I/O操作是异步的 , 包括Bind、Write、Connect等操作会简单的返回一个
ChannelFuture
。
- 调用者不能立刻获得结果 , 而是通过
Future-Listener
机制 , 用户可以方便地主动获取或者通过通知机制获得I/O操作结果 。
- Netty的异步模型是建立在future和callback(回调)之上的 。重点是future,它的核心思想:假设一个方法
func
, 计算过程可能非常耗时 , 等待func
返回显然不合适 。那么在 调用func
的时候 , 立刻返回一个future,后续可以
通过future去监控方法func
的处理过程(即:Future-Listener机制)
ChannelFuture
是一个接口:Public interface ChannelFuture extends Future
- 可以添加监听器 , 当监听的事件发生时 , 就会通知到监听器 。
经验总结扩展阅读
- 高三物理学习方法技巧是什么 有哪些窍门
- 给朋友的腊八节祝福语
- 腊八节经典祝福文案15篇
- 腊八节祝福语集合
- 腊八节最暖心祝福语2023
- 国庆节姐姐祝福语2023
- 国庆节祝福姐姐的祝福语
- 银行国庆节短信祝福
- 2023国庆节祝福语
- 2023祝朋友七夕快乐的祝福语