1 什么是Reactor 模型?
reactor是一种处理并发的模式,将请求提交的一个或者多个服务处理业务,也就是说应用程序将接口注册到reactor反应堆上,当底层的复用器检测到了就绪事件,就会调用注册的接口处理业务。
而reactor模式框架包括: 事件源,Reactor 多路分发机制,事件处理程序
- handle--事件源:在Linux统称为文件描述符 window上为句柄 ,在libevent中有3种类型事件:定时器事件(event time)信号事件(signal event)和I/O事件
- event demultiplexer--多路分发机制:由操作系统选择select /epoll 等,是一个系统调用,将关心的事件注册到event中,检测是否有事件发生,当事件到达事,通知已经注册的描述符
- reactor反应器:是一个事件管理的接口,内部使用多路分发机制进行注册,和销毁事件,当多路分发机制检测到描述符有事件发生时,调用该事件的注册的回调函数处理,运行事件循环。在libevent中就是一个event_base结构体
- Event Handler--事件处理程序:具体的对于就绪的事件的具体处理,供Reactor调用,在libevent中就是一个event结构体
思想就是:分而治之+事件驱动
处理流程:
reactor 本质上是同步的I/O,因为:
- 应用程序注册相关事件和事件处理
- 多路复用检测就绪事件
- 事件分离器,分发事件处理方法
- 事件处理方法,读取后,进行下一步操作
reactor 的优点:
- 响应快,不会为某个I/O阻塞,但是reactor本身还是同步的
- 编程相对简单,可以避免复杂的多线程安全问题
- 可扩展性,可以增加reactor实例,来充分利用CPU
- 可复用行,reactor本身和逻辑无关