美文网首页
Reactor笔记

Reactor笔记

作者: NealLemon | 来源:发表于2020-09-02 22:28 被阅读0次

Reactor笔记

Doug Lea - 《Scalable IO in Java》

Classic Service Designs

classic.jpg

传统的服务设计如上图所示,在每一个处理器中,将所有的处理逻辑都在一个线程里按照顺序阻塞式的调用。在上图的处理逻辑中,涉及到了 readsend这种IO操作,然而等待这些IO操作极大的浪费了CPU的资源,损耗了极大的机器性能。

Reactor Pattern

由于传统的设计对机器的资源和性能造成比较大的浪费,因此Reacot模式就诞生了。

基础方法论

  • 将处理分为粒度更细的任务
    • 每个小任务的执行是非阻塞
  • 当任务可执行时再去执行:比如机器在执行IO操作的时候,CPU不会去等待IO的结束,而是去执行其他的任务,当IO操作结束时,CPU再去执行。
  • JAVA NIO 中基本支持的机制
    • 非阻塞的读写
    • 当察觉到相关IO事件与任务有关联时,进行分发操作。
  • 一系列的事件驱动设计
    • 更少的资源占用
    • 更少的系统开销: 比如上下文切换,锁的减少
    • 分发效率低:必须手动将动作绑定到事件

类似于GUI事件驱动的操作,如下图所示

AWT.jpg

当触发click事件时,产生的事件就在AWT 事件队列中,然后AWT中的监听线程去监听事件,根据事件类型去做对应的操作。Reator模式只是类似,而AWT是基于监听者模式去监听对应的事件处理机制。

Reactor Pattern

  • 通过分发关联的处理器去响应IO事件。比如读操作,使用读处理器去处理,而写操作使用处理器去处理。
  • 处理器执行非阻塞的动作:类似于NIO中的Handler
  • 通过将处理器绑定到事件来进行管理。就是当事件产生了哪一个处理器要去处理。

Basic Reactor Design

BasicReactor.jpg

通过上图我们可以简单理解一下

  • Reactor:相当于一个线程,它负责监听客户端发起的连接或者事件,然后通过客户端发送过来的事件去派发对应的处理器,比如读写。
  • 特定的处理器去处理客户端传来的事件。
  • acceptor:类似于事件处理器的管理。

具体的实现代码可以参照原文

相关文章

网友评论

      本文标题:Reactor笔记

      本文链接:https://www.haomeiwen.com/subject/zxegsktx.html