`
CshBBrain
  • 浏览: 649183 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:144643
Group-logo
HTML5移动开发
浏览量:137680
社区版块
存档分类
最新评论

reactor和proactor模式的比较

阅读更多

转自:http://blog.163.com/zongyuan1987@126/blog/static/13162315620108902130394/

reactor与proactor的概念
1、标准定义
两种I/O多路复用模式:Reactor和Proactor
一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。
分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。
开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。
两个与事件分离器有关的模式是Reactor和Proactor。Reactor模式采用同步IO,而Proactor采用异步IO。
在Reactor中,事件分离器负责等待文件描述符或socket为读写操作准备就绪,然后将就绪事件传递给对应的处理器,
最后由处理器负责完成实际的读写工作。
而在Proactor模式中,处理器--或者兼任处理器的事件分离器,只负责发起异步读写操作。
IO操作本身由操作系统来完成。传递给操作系统的参数需要包括用户定义的数据缓冲区地址和数据大小,
操作系统才能从中得到写出操作所需数据,或写入从socket读到的数据。事件分离器捕获IO操作完成事件,
然后将事件传递给对应处理器。比如,在windows上,处理器发起一个异步IO操作,再由事件分离器等待IOCompletion事件。
典型的异步模式实现,都建立在操作系统支持异步API的基础之上,我们将这种实现称为“系统级”异步或“真”异步,
因为应用程序完全依赖操作系统执行真正的IO工作。
举个例子,将有助于理解Reactor与Proactor二者的差异,以读操作为例(类操作类似)。
在Reactor中实现读:
- 注册读就绪事件和相应的事件处理器
- 事件分离器等待事件
- 事件到来,激活分离器,分离器调用事件对应的处理器。
- 事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返还控制权。
与如下Proactor(真异步)中的读过程比较:
- 处理器发起异步读操作(注意:操作系统必须支持异步IO)。在这种情况下,处理器无视IO就绪事件,它关注的是完成事件。
- 事件分离器等待操作完成事件
- 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作,并将结果数据存入用户自定义缓冲区,最后通知事件分离器读操作完成。
- 事件分离器呼唤处理器。
- 事件处理器处理用户自定义缓冲区中的数据,然后启动一个新的异步操作,并将控制权返回事件分离器。
可以看出,两个模式的相同点,都是对某个IO事件的事件通知(即告诉某个模块,这个IO操作可以进行或已经完成)。在结构
上,两者也有相同点:demultiplexor负责提交IO操作(异步)、查询设备是否可操作(同步),然后当条件满足时,就回调handler;
不同点在于,异步情况下(Proactor),当回调handler时,表示IO操作已经完成;同步情况下(Reactor),回调handler时,表示
IO设备可以进行某个操作(can read or can write),handler这个时候开始提交操。
2、通俗理解
使用Proactor框架和Reactor框架都可以极大的简化网络应用的开发,但它们的重点却不同。
Reactor框架中用户定义的操作是在实际操作之前调用的。比如你定义了操作是要向一个SOCKET写数据,
那么当该SOCKET可以接收数据的时候,你的操作就会被调用;
而Proactor框架中用户定义的操作是在实际操作之后调用的。比如你定义了一个操作要显示从SOCKET中读入的数据,
那么当读操作完成以后,你的操作才会被调用。
Proactor和Reactor都是并发编程中的设计模式。在我看来,他们都是用于派发/分离IO操作事件的。
这里所谓的IO事件也就是诸如read/write的IO操作。"派发/分离"就是将单独的IO事件通知到上层模块。
两个模式不同的地方在于,Proactor用于异步IO,而Reactor用于同步IO。

分享到:
评论

相关推荐

    tpd_reactor_proactor.pdf

    "Reactor 和 Proactor 模式在网络编程中的应用" Reactor 和 Proactor 模式是两种常见的事件处理模式,在网络编程中广泛应用于设计高效、可靠的并发和网络应用程序。在本文中,我们将详细介绍 Reactor 和 Proactor ...

    actor和proactor模式1

    在IT领域,特别是网络编程和并发处理中,`Actor`和`Proactor`模式是两种重要的设计模式,它们主要用于高效地处理I/O操作。这两种模式都涉及到如何有效地管理多个并发的I/O请求,以提高系统性能和响应速度。 首先,...

    Proactor模式&Reactor模式详解

    ### Proactor模式&Reactor模式详解 #### 一、引言 在服务器端编程领域,构建高效的输入/输出(I/O)模型对于提高程序性能至关重要。根据数据传输方式的不同,通常将I/O模型分为四类:同步阻塞I/O、同步非阻塞I/O、I...

    Proactor和Reactor模式_继续并发系统设计的扫盲[参照].pdf

    不过,Proactor模式强调了操作的非阻塞特性,它在操作系统级别实现了真正的异步,使得处理器可以在等待I/O操作完成的同时处理其他任务,提高了系统的并发效率。 在实际应用中,Reactor模式更适合于那些需要快速响应...

    两种高性能IO设计模式(ReactorProactor)的比较

    两种高性能IO设计模式(Reactor和Proactor)比较 在高性能服务器设计中,I/O设计模式扮演着至关重要的角色。常见的I/O设计模式有阻塞型、非阻塞同步型和非阻塞异步型。其中,非阻塞异步型I/O设计模式是性能最高、...

    p401 - p418 proactor -Reactor模型

    下面我们来详细了解 Proactor-Reactor 模式的设计思想和实现机理。 问题背景 在设计高性能服务器时,如何处理大量客户端连接是关键问题之一。最直接的方法是为每个连接创建一个线程,但是这种方法会带来性能开销和...

    两种高性能IO设计模式(ReactorProactor)的比较.docx

    总的来说,Reactor模式适合于同步I/O环境,而Proactor模式利用异步I/O提供更高的并发性和性能。选择哪种模式取决于具体的应用场景和需求,例如服务器的并发连接数、系统资源限制以及对实时性的要求。在设计高性能...

    Network Pattern

    网络模式是计算机科学中用于处理网络通信...在学习过程中,可以参考各种网络编程书籍,如《UNIX网络编程》、《网络编程黑皮书》等,以及相关的开源项目,如Boost.Asio,它们都提供了Reactor和Proactor模式的具体实现。

    ACE网络编程模式比较

    **ACE网络编程模式详解** ACE(Adaptive Communication ...Reactor和Proactor模式适合单线程环境,半同步/半异步和领导者/跟随者模式则适用于多线程环境。理解这些模式的优缺点,有助于设计出更高效、健壮的网络应用。

    ACE通用服务器ace server

    通过结合Reactor和Proactor模式,开发者可以设计出能够高效处理大量并发连接的应用,这对于实时性要求高、负载大的服务场景非常有益。同时,ACE库的跨平台特性使得这样的服务器可以轻松部署在不同的操作系统上,降低...

    网络服务设计模式

    分析常见高性能网络设计模式,涵盖了reactor, proactor。

    cpp-利用C编写的HTTP服务器使用线程池Reactor模式

    在IT领域,C++是一种强大的编程语言,常用于开发高性能的应用程序,特别是在网络...如果你计划进一步扩展这个服务器,可以考虑增加对HTTPS的支持,优化线程池的调度策略,或者引入更高级的并发模型,如Proactor模式。

    Java NIO:浅析IO模型_动力节点Java学院整理

    Java NIO:浅析IO模型 Java NIO是Java语言中用于高性能I/O操作的API,理解IO模型是学习Java NIO的基础。...Proactor模式是指在IO操作过程中,将所有的IO事件都交给一个事件处理器来处理,然后将结果回调给应用程序。

    ACE高清pdf教程及应用实例

    4. 异步I/O:介绍ACE的异步I/O模型,如Reactor和Proactor模式,如何处理并发事件。 5. 网络编程:讲解如何使用ACE进行TCP/IP、UDP等网络协议编程。 6. 并发与线程管理:探讨ACE的线程池、线程同步和互斥锁等工具,...

    C++网络编程 卷2 基于ACE和框架的系统化复用.zip

    3. **I/O复用**:探讨ACE的Reactor和Proactor模式,这两种模式分别对应于传统的事件驱动编程和异步事件通知,它们是实现高效I/O操作的关键。 4. **网络通信**:详细阐述TCP和UDP协议的使用,包括连接建立、数据传输...

    sdf.rar_ACE

    4. **事件处理**:深入讲解ACE的事件驱动编程模型,如Reactor和Proactor模式,以及它们在处理异步事件时的优势。 5. **分布式系统**:介绍ACE如何支持分布式系统,包括命名服务、远程过程调用(RPC)和分布式对象...

    Scalable IO in Java原文和翻译

    同时,他还会讨论Java NIO库如何支持这些模式,例如`java.nio.channels.Selector`在Simple Reactor和Multicast Reactor中的作用,以及`Future`和`CompletableFuture`如何与Proactor模式配合。 在实际开发中,Java的...

    proactor originate

    Proactor模式是一种异步事件处理架构模式,主要负责解复用和调度由异步操作完成触发的服务请求。这种模式在处理并发和高性能应用时尤其有用,如高流量的Web服务器。 在传统的反应器模式(Reactor pattern)中,当一...

Global site tag (gtag.js) - Google Analytics