475-Reactor模型

Reactor模型

反应器设计模式是用于处理服务请求的事件处理模式由一个或多个输入并发地交付给服务处理程序。服务处理程序然后将传入的请求解复用,并将它们同步地分发到相关的请求处理程序。

重要组件
Event事件、Reactor反应堆、Demultiplex事件分发器、Evanthandler事件处理器
在这里插入图片描述
在整个的基于Reactor模型的网络服务请在交互的时候,首先,我们把事件注册到反应堆上,也就是说,应用程序对这个事件感兴趣,请求反应堆帮忙来监听它所感兴趣的事件,并且在这个事件发生的时候调用相应的预置的回调Handler,向反应堆注册事件,**就是把这个事件event和对应的handler(一个event对应一个Evanthandler)**都给到reactor反应堆。反应堆存储着事件event事件以及事件处理的集合,可以添加更多选项,比如说,事件添加的时间,事件响应的时间等等。
reactor反应堆根据epoll_ctrl对事件分发器进行事件的设置,调整,添加新的事件,修改已有的事件,删除添加的事件,然后启动反应堆,反应堆的后端就会驱动事件分发器的启动,多路复用,就是在开启epoll__wait,因为事件分发器在开启epoll_wait之前,reactor已经调用相应的方法把应用程序注册过来的事件进行添加,调整,删除,多路复用开启,epoll_wai开始,整个服务器处于阻塞的状态等待新用户的连接,或者是已连接用户的读写事件。
如果epoll_wait有监听到新的事件的产生,那么多路复用分发器就会把这个分发的事件给反应堆返回,因为事件发生了,在reactor模型里,就要调用事件的处理器。
多路复用分发器在监听到事件分发的时候,不知道事件对应的处理器在哪,都是在反应堆维护的,所以就把分发的事件返回给反应堆。
reactor就会找到event对应的Evanthandler(一般用map表),调用具体的event handler,来读取read用户的请求,然后进行解码,因为在通信的时候数据是有序列化反序列化的,然后进行处理,计算,然后进行打包,编码,也就是数据的序列化,send发送到网络上给用户响应。

eventhandler: 读取用户事件的请求read,反序列化(解码),业务逻辑处理计算,对处理的结果编码序列化,send给用户返回一个响应。
Event事件:事件的fd,读或者写,或者其他的信息

muduo库的Multiple Reactors模型如下

在这里插入图片描述

在这里边,相当于是:图中所谓的反应堆reactor,实际上都是代表着Demultiplex事件分发器,由他们监听具体事件的发生,调用相应事件的回调,
在这里插入图片描述
reactor主要存储的是事件和事件的处理器,仅此而已。
但是这张图上的reactor实际上是reactor和Demultiplex事件分发器的合二为一。
多路事件分发器想象成epoll,mainreactor相当于I/O线程的eventloop,主要做的是新用户的连接accept,listen fd有事件写入,就accept取出已连接用户的fd,然后派送到具体的工作线程上。
subreactor线程专门做已连接用户的读写事件处理
如果再有耗时的I/O操作,比如说传输文件,就单独再起一个线程去处理耗时的I/O操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值