2019-05-08——Java NIO Reactor模式

Reactor

反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有的请求,然后派发这些请求至相关的工作线程进行处理。

传统的并发处理

传统的网络请求并发处理是为每一个socket开启一个线程


image.png

该模式的缺点显而易见:
1、当请求比较多时,系统的性能会下降,因为创建和回收线程会消耗资源
2、当请求激增时,由于系统资源有限,请求可能会被阻塞
3、当请求处于I/O阻塞的时候,系统的资源被浪费了

Reactor设计模式

为了解决传统的多线程处理并发请求的缺陷,设计人员采用一种基于事件驱动的设计模式,这就是Reactor。

  • Reactor是采用基于事件驱动的设计,当有事件触发时,才会调用处理器进行数据处理。


    image.png
  • 通过改进使用多线程处理业务逻辑


    image.png
  • 对于多个CPU的机器,为充分利用系统资源,将Reactor拆分为两部分。


    image.png

Reactor模式结构

image.png

Reactor模式主要有一下几个角色:

  • Handle: 是事件的发源地,比如一个网络socket、磁盘文件等。而发生在handle上的事件可以有connection、ready for read、ready for write等。
  • Synchronous Event Demultiplexer:同步事件分离器,本质上是系统调用。阻塞等待一系列的Handle中的事件到来,如果阻塞等待返回,即表示在返回的Handle中可以不阻塞的执行返回的事件类型。这个模块一般使用操作系统的select来实现。
  • Initiation Dispatcher:初始分发器,也是reactor角色,提供了注册、删除与转发event handler的方法。当Synchronous Event Demultiplexer检测到handle上有事件发生时,便会通知initiation dispatcher调用特定的event handler的回调方法。
  • Event Handler事件处理器,其会定义一些回调方法或者称为钩子函数,当handle上有事件发生时,回调方法便会执行,一种事件处理机制。
  • Concrete Event Handler:具体的事件处理器,实现了Event Handler。

在处理web请求时,通常有两种体系结构,分别为:thread-based architecture(基于线程)、event-driven architecture(事件驱动)

事件驱动体系结构是目前比较广泛使用的一种。这种方式会定义一系列的事件处理器来响应事件的发生,并且将服务端接受连接与对事件的处理分离。其中,事件是一种状态的改变。比如,tcp中socket的new incoming connection、ready for read、ready for write。


  • https://blog.csdn.net/u013219087/article/details/81229873
  • https://www.jianshu.com/p/eef7ebe28673
  • https://www.cnblogs.com/doit8791/p/7461479.html

你可能感兴趣的:(2019-05-08——Java NIO Reactor模式)