美文网首页
Reactor/Proactor模式

Reactor/Proactor模式

作者: 李昂的数字之旅 | 来源:发表于2018-05-08 23:33 被阅读0次

Reactor(反应器)/Proactor(前摄器)是多路复用方案之一,有点像观察者模式,都是通过注册然后等待通知的方式处理事件,
区别在于,观察者将自己直接注册到被观察对象上,而Reactor模式是将观察者注册到公共对象上,通过公共对象去监听被观察对象发出的事件。

Reactor示意图图
  • Handel被监听对象们
  • Synchronous Event Demultiplexer会主动去轮询Handle,看是否有准备就绪的事件
  • Initiation Dispatcher如果有准备就绪事件,就通过这个将事件发给Event Handler
  • Event Handler 事件处理程序接口
  • Concrete Event Handler 事件处理程序实现
    Reactor的核心思想就是,将监听事件就绪的行为放到一个Reactor线程去处理,Reactor线程是阻塞的,其他线程可以从IO中解放。

缺点

  • 在一个Reactor线程上,一个事件处理太久,会阻塞后面的事件处理
  • 阻塞在select()上,不是AIO

Reactor是在事件准备就绪时通知Event Handler,所以Handler得到消息后,还需要去读写数据;Proactor是在IO数据准备就绪时通知Event Handler,所以Handler在接收到消息后,就能直接处理数据。
这么看,Reactor像一个廉价保姆,她会提醒你该吃饭了,但并不不会帮你做好饭;Proactor是个高级保姆,她会按照你的要求,把饭做完再通知你该吃饭了。主要区别是,在通知你的时候,饭是不是已经做好了。
自然廉价保姆功能比较简单,高级保姆功能更先进点,先进的代价就是要付出更多的酬劳(系统支持该特性)


流程区别

Reactor

  1. 注册监听(用户)
  2. 事件就绪(Reactor)
  3. 读取IO数据(用户)
  4. 处理数据(用户)

Proactor

  1. 注册监听(用户)
  2. 事件就绪(Proactor)
  3. 读取IO数据(Proactor)
  4. 处理数据(用户)
    可以看出他们主要区别在,读取IO是交个谁来做,或者说用户得到通知的时候数据是否就绪了。

相关文章

  • Netty浅析

    IO模型 IO多路复用模式:Reactor、Proactor NIO实现的是Reactor模式。通过select、...

  • Reactor/Proactor模式

    Reactor(反应器)/Proactor(前摄器)是多路复用方案之一,有点像观察者模式,都是通过注册然后等待通知...

  • Reactor 模式

    【未完待续】 参考 两种高效的服务器设计模型:Reactor和Proactor模型reactor和proactor...

  • Reactor模式和Proactor模式

    Reactor模式,也叫做Dispatcher模式 使用IO多路复用解决系统资源浪费的问题,Reactor会监听事...

  • Reactor模式和Proactor模式

    随着IO多路复用技术的出现,出现了很多事件处理模式。同步I/O模型通常由Reactor模式实现,而异步I/O模型则...

  • Proactor和Reactor模型

    随着网络设计模式的兴起,Reactor和Proactor事件处理模式应运而生。同步I/O模型通常用于实现React...

  • Proactor模式

    节选自:Linux高性能服务器编程 与Reactor模式不同,Proactor模式将所有I/O操作都交给主线程和内...

  • I/O模型之三: I/O 设计模式 Reactor

    平时接触的开源产品如Redis、ACE,事件模型都使用的Reactor模式;而同样做事件处理的Proactor,由...

  • 带你彻底搞懂高性能网络模式Reactor 和 Proactor

    摘要:无论是 Reactor,还是 Proactor,都是一种基于「事件分发」的网络编程模式,区别在于 React...

  • 【转载】Reactor 和 Proactor 模式

    原文地址:http://name5566.com/4175.html 参考文献列表: http://www.art...

网友评论

      本文标题:Reactor/Proactor模式

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