Reactor模式简介
Reactor模式是一个基于事件分发的模式。主要用于IO多路复用。
当一个事件到来的时候,Reactor根据事件的不同类型,通知对应的handler处理。
Reactor详解
本文拿 网络IO多路复用来举例,我们都知道IO多路复用可以提高服务器的并发处理能力!
IO多路复用就是一个线程可以监控多个socket,减少线程的创建。当服务器连接数过多的时候,IO多路复用能够减少线程数,也可以减少线程上线切换导致的资源浪费。
但是socket分为两种情况:
1、负责新建连接的socket
2、用于读取数据的socket
对于这两种socket,处理方式是不同的。Reactor模式可以根据事件的不同,将这两种不同的情况分发给不同的handler。
如上图所示,Reactor用于接收事件,然后分发事件,如果是新建连接事件,就分发给Acceptor处理,如果是读取事件,就将数据分发给Handler处理
上述是单Reactor单线程处理模式,也就是所有的事件都分发给一个Reactor,并且对于所有的事件的处理都是在一个线程中的,这样会导致无法利用多核资源。
单Reactor多线程模型
单Reactor多线程模式下,Reactor将对应的任务提交给对应的handler,handler会利用线程池的资源来执行对应的任务,利用多核能够提高处理的效率
多Reactor多线程模型
多Reactor多线程模式下,会有MainReactor和多个SubReactor。
MainReactor只负责socket的新建连接事件,不会再监听socket的读取事件,而是会指定对应的SubReactor来监听socket的读取事件
SubReactor只负责监听多个socket的监听事件。