单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 响应效率;同时让业务线程专注处理复杂逻辑,通过线程池控制资源占用
1583

被折叠的 条评论
为什么被折叠?



