反应器(Reactor)是一种为处理服务请求并发提交到一个或者多个服务处理程序的事件设计模式,当接收请求后,服务处理程序使用解多路分配策略,然后同步地派发这些请求至相关的请求处理程序。 处理特点: 1.事件驱动(event handling)
2.可以处理一个或多个输入源(one or more inputs)
3.通过Service Handler同步的将输入事件(Event)采用多路复用分发给相应的Request Handler(多个)处理
reactor简要模型png
Reactor Pattern OMT类图.png
Reactor的三种模型
首先Reactor 模式中可定义三种角色:
-
Reactor负责监听和分配事件,将I/O事件分派给对应的Handler
-
Acceptor处理客户端新连接,并分派请求到处理器链中
-
Handlers执行非阻塞读/写 任务,可用资源池来管理
单Reactor单线程模型
Reactor 对象通过 select 监控连接事件,收到事件后通过dispatch进行转发。如果是连接建立的事件,则由Acceptor接受连接,并创建handler处理后续事件。handler会完成read->业务处理-->send的完整业务流程。
只是在代码上进行了组件的区分,但是整体操作还是单线程,不能充分利用硬件资源。handler业务处理部分没有异步。Redis使用单Reactor单进程的模型。 单Reactor多线程模型
相对于第一种单线程的模式来说,在处理业务逻辑,也就是获取到IO的读写事件之后,交由线程池来处理,handler收到响应后通过sen