一般情况下,I/O 复用机制需要事件分享器(event demultiplexor [1、3])。 事件分享器的作用,即将那些读写事件源分发给各读写事件的处理者,就像送快递的在楼下喊: 谁的什么东西送了, 快来拿吧。开发人员在开始的时候需要在分享器那里注册感兴趣的事件,并提供相应的处理者(event handlers),或者是回调函数; 事件分享器在适当的时候会将请求的事件分发给这些handler或者回调函数。

涉及到事件分享器的两种模式称为:Reactor and Proactor [1]。 Reactor模式是基于同步I/O的,而Proactor模式是和异步I/O相关的。 在Reactor模式中,事件分离者等待某个事件或者可应用或个操作的状态发生(比如文件描述符可读写,或者是socket可读写),事件分离者就把这个事件传给事先注册的事件处理函数或者回调函数,由后者来做实际的读写操作。

而在Proactor模式中,事件处理者(或者代由事件分离者发起)直接发起一个异步读写操作(相当于请求),而实际的工作是由操作系统来完成的。发起时,需要提供的参数包括用于存放读到数据的缓存区,读的数据大小,或者用于存放外发数据的缓存区,以及这个请求完后的回调函数等信息。事件分离者得知了这个请求,它默默等待这个请求的完成,然后转发完成事件给相应的事件处理者或者回调。举例来说,在Windows上事件处理者投递了一个异步IO操作(称有overlapped的技术),事件分离者等IOCompletion事件完成[1]。 这种异步模式的典型实现是基于操作系统底层异步API的,所以我们可称之为“系统级别”的或者“真正意义上”的异步,因为具体的读写是由操作系统代劳的。

Reactor/Proactor的比较 (ZZ)相关推荐

  1. 两种高性能I/O设计模式(Reactor/Proactor)的比较

    综述 这篇文章探讨并比较两种用于TCP服务器的高性能设计模式. 除了介绍现有的解决方案,还提出了一种更具伸缩性,只需要维护一份代码并且跨平台的解决方案(含代码示例),以及其在不同平台上的微调. 此文还 ...

  2. 现代服务器底层奠基(SEDA+Reactor/Proactor+epoll/kqueue )

    SEDA(Staged Event-Driven Architecture) SEDA- An Architecture for Well-Conditioned, Scalable Internet ...

  3. 【翻译】两种高性能I/O设计模式(Reactor/Proactor)的比较

    [翻译]两种高性能I/O设计模式(Reactor/Proactor)的比较 分类: Comet&&NIO 2012-12-20 19:05  762人阅读  评论(0)  收藏  举报 ...

  4. 线程模型Reactor/Proactor的区别

    反应器(Reactor)是一种为处理服务请求并发提交到一个或者多个服务处理程序的事件设计模式,当接收请求后,服务处理程序使用解多路分配策略,然后同步地派发这些请求至相关的请求处理程序. 处理特点: 1 ...

  5. Linux网络编程 | 事件处理模式:Reactor模式、Proactor模式

    文章目录 Reactor模式 Proactor模式 同步I/O模型模拟Proactor模式 两者的优缺点 Reactor Proactor 随着网络设计模式的兴起,Reactor和Proactor事件 ...

  6. 2种IO并发开发中的设计模式:Reactor and Proactor

    Reactor and Proactor [原文:http://blog.csdn.net/wenbingoon/article/details/9880365] 1 概述 IO读写时,多路复用机制都 ...

  7. I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor

    不同的操作系统实现的io策略可能不一样,即使是同一个操作系统也可能存在多重io策略,常见如linux上的select,poll,epoll,面对这么多不同类型的io接口,这里需要一层抽象api来完成, ...

  8. Linux服务器 | 事件处理模式:Reactor模式、Proactor模式

    文章目录 Reactor模式 Proactor模式 同步I/O模型模拟Proactor模式 两者的优缺点 Reactor Proactor 同步I/O模型通常用于实现 Reactor 模式,异步I/O ...

  9. 模型描述的关系模式_框架篇:见识一下linux高性能网络IO+Reactor模型

    前言 网络I/O,可以理解为网络上的数据流.通常我们会基于socket与远端建立一条TCP或者UDP通道,然后进行读写.单个socket时,使用一个线程即可高效处理:然而如果是10K个socket连接 ...

最新文章

  1. springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
  2. vue中的computed 与 watch
  3. python rpc webservice_关于RPC、HTTP、WebService的区别
  4. 统计学中p值计算公式_不得不学的统计学基础知识(二)
  5. 《Android游戏开发详解》——第3章,第3.1节构造方法
  6. 代理服务器列表(20100116)
  7. PostgreSQL判断一个表是否存在
  8. java swing 等待框_java – 让用户使用Swing等待
  9. Zynq7000硬件开发之总体硬件架构设计
  10. C# - [实践] 电子词典
  11. ubuntu重装显卡驱动全过程!所有选项的选择!
  12. SpringCloud(一)手把手入门
  13. 考高级用计算机和外语证,济南:“老外”也能评职称了!2018年度申报开始,这些专业评高级不用考外语计算机...
  14. 视频制作和php,【艾奇电子相册视频制作软件和PHP 4.4.0 For Windows哪个好用】艾奇电子相册视频制作软件和PHP 4.4.0 For Windows对比-ZOL下载...
  15. 取消web浏览器 打印页眉和页脚
  16. 好嗨游戏:TapTap9.9分,《鸡你太美》这到底是什么魔鬼游戏?
  17. Win32汇编学习笔记之基础篇
  18. mongorepository查询条件_springboot jpa + mongodb实现多条件查询数据
  19. 哪些技术好书值得一读再读?阿里大牛列了一份经典书单
  20. 利用笔记本热点AP功能实现在没有越狱的iPad/iPhone抓包

热门文章

  1. Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java
  2. 网站初学笔记3-HTML实用元素5
  3. MFC/Windows API 使用过的函数(持续更新)
  4. hibernate 持久化
  5. MDaemon 10.1.2 通过Webclient发邮件时,提示“发邮件时发生错误
  6. 小tips:JS严格模式(use strict)下不能使用arguments.callee的替代方案
  7. opencv源码解析之(6):hog源码分析
  8. 视频互动直播软件开发中的连麦问题分析
  9. Docke的WEB管理工具
  10. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果...