首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
虚拟化.超融合.云计算
›
公有云
›
SAAS
›
Netty:底层模式:Reactor 模式
返回列表
发新帖
Netty:底层模式:Reactor 模式
[复制链接]
发表于 2026-3-12 09:32:48
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
底层模式:Reactor 模式
什么是 Reactor 模式?
Reactor 模式是一种
事故驱动
的并发处置处罚模式,通过 I/O 多路复用监听事故,当事故停当时分发到对应的处置处罚器处置处罚。Netty 的线程模子就是基于 Reactor 模式实现的。
三种 Reactor 模式对比
模式布局优点缺点实用场景
单 Reactor 单线程
1 个线程处置处罚全部事故简单、无并发题目性能瓶颈、单点故障毗连数少、处置处罚快
单 Reactor 多线程
1 个 Reactor + 多个 Worker 线程充实使用多核 CPUReacto 还是瓶颈中等并发
主从 Reactor 多线程
MainReactor + SubReactor + Worker高性能、高可用复杂度高
高并发场景
(Netty 接纳)
模式一:单 Reactor 单线程
┌─────────────────┐
客户端连接 ────────→ │ Reactor │
│ (单线程) │
│ │
│ - 监听事件 │
│ - 分发事件 │
│ - 处理业务 │
└─────────────────┘
复制代码
特点:
一个线程完成:监听毗连、分发事故、处置处罚业务
线程安全,无需加锁
性能瓶颈
:处置处罚慢会壅闭后续事故
代码表现:
while (true) {
selector.select(); // 监听事件
Set<SelectionKey> keys = selector.selectedKeys();
for (SelectionKey key : keys) {
if (key.isAcceptable()) {
// 处理连接
} else if (key.isReadable()) {
// 处理读取(业务逻辑也在同一线程)
}
}
}
复制代码
模式二:单 Reactor 多线程
┌─────────────────┐
客户端连接 ────────→ │ Reactor │
│ (单线程) │
│ │
│ - 监听事件 │──────→ ┌─────────────┐
│ - 分发事件 │ │ Handler 线程池 │
└─────────────────┘ │ - 处理业务 │
└─────────────┘
复制代码
特点:
Reactor 线程:只负责监听和分发
Handler 线程池:负责处置处罚业务逻辑
瓶颈
:Reactor 单线程处置处罚分发,高并发时仍有瓶颈
模式三:主从 Reactor 多线程(Netty 接纳)
┌─────────────────────┐
客户端连接 ────────→ │ MainReactor (Boss) │
│ - 监听连接 │
└──────────┬───────────┘
│ 接收新连接
▼
┌─────────────────────┐
│ SubReactor (Worker) │
│ - 监听读写事件 │──────→ ┌─────────────┐
│ - 分发事件 │ │ Handler 线程池 │
└─────────────────────┘ │ - 处理业务 │
└─────────────┘
复制代码
特点:
MainReactor(Boss)
:专门处置处罚毗连哀求(Accept)
SubReactor(Worker)
:处置处罚已创建毗连的 I/O 读写
Handler 线程池
:处置处罚耗时业务逻辑(可选)
无瓶颈
:MainReactor 和 SubReactor 各司其职
Netty 对应实现:
// Boss Group:对应 MainReactor,处理连接
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
// Worker Group:对应 SubReactor,处理读写
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup) // 主从 Reactor
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new MyHandler());
}
});
复制代码
Netty 为什么选择主从 Reactor?
对比项单线程多线程主从 Reactor
并发处置处罚本领
❌ 低⚠️ 中✅ 高
CPU 使用率
❌ 低⚠️ 中✅ 高
编程复杂度
✅ 简单⚠️ 中等❌ 复杂(Netty 封装了)
可扩展性
❌ 差⚠️ 中✅ 好
总结:
Netty 通过封装主从 Reactor 模式,既生存了高性能,又低沉了使用复杂度。
回复
使用道具
举报
返回列表
浏览过的版块
物联网
Oracle
Java
数据仓库与分析
分布式数据库
人工智能
SQL-Server
前端开发
.Net
何小豆儿在此
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表