通过前两节我们已经知道了NIO的核心组件以及为什么要有NIO,虽然在Java中没有真的IO多路复用模型,但是Reactor就是NIO实现多路复用的一种模式。
Reactor设计模式是一种事件处理模式,用于处理通过一个或多个输入同时交付给服务处理程序的服务请求。然后,服务处理程序对传入的请求进行多路分解,并将它们同步分发到关联的请求处理程序。
从上述表述中我们大致可以总结出:
对应我们的NIO中的实现:
上述Reactor模型主要涉及的类有:
最基本的单线程Reactor模型,Reactor负责多路分离套接字(阻塞并且当事件触发时进行分发),当有新连接触发到CONNECT事件后,交由Accptor处理,有IO读写事件交由Handler处理。
Accceptor负责获取与客户端建立的SocketChannel,绑定对应的EventHandler,当该SocketChannel上有事件发生时就可以获取到对应的EventHandler并进行处理。
相对于单Reactor模型,我们在获取到IO事件以后可以交由线程池处理,可以减少Reactor线程的消耗,Reactor从而更加专注的关注于事件的分发。