Reactor反应堆模型

单Reactor 单线程/进程

Reactor设计模式本质是基于事件驱动的。将对IO的处理转换为对事件的处理

 IO操作通过非阻塞IO实现,IO就绪通过IO多路复用来完成

这里的select、accept、read、send是系统调用函数,dispatch和业务处理是需要完成的操作,其中dispatch是分发时间操作

接下来介绍【但Reactor单进程】这个方案

  • Reactor对象通过epoll监听事件,收到事件后通过dispatch进行分发,具体分发给Acceptor对象进行处理还是Handler对象,要看具体收到的事件类型。
  • 如果是建立连接的事件,则交由Acceptor对象进行处理,Acceptor对象 会通过accept方法获取连接,并创建一个Handler对象来处理后续响应事件
  • 如果不是建立连接事件,则交由当前连接对应的Handler对象进行响应
  • Handler对象通过read->业务处理->send的流程来完成完整的业务流程

Reactor模型运行机制

muduo采用的就是主从Reactor模型,one loop per thread

muduo模型的工作流程(以客户端请求为例)

1. 主Reactor监听listenfd,当客户端发起连接时,触发可读事件,主Reactor执行accept生成confd

2. 主Reactor通过负载均衡(轮询)将confd分配给从Reactor

3. 从Reactor将confd注册到自己的epoll中,监听其IO事件

4. 客户端发送数据后,confd触发可读事件,从Reactor读取数据(recv)

5. 从Reactor不直接处理业务,而是将“数据+回调函数”打包成任务,扔给业务线程池

6. 业务线程池中的线程处理完业务后,将结果交还给从Reactor

7. 从Reactor监听confd有可写事件,将响应的数据写回给客户端(send)

Reactor 的核心线程本质就是 IO 线程

让 I/O 线程永远 “轻装上阵”,不被耗时的业务逻辑拖累,最大化 I/O 响应效率;同时让业务线程专注处理复杂逻辑,通过线程池控制资源占用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值