`
jishuaige
  • 浏览: 10302 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Reactor and Proactor

    博客分类:
  • Java
阅读更多
引言:
   这里准备记录一下自己对TCP服务器的高性能设计模式的理解!

系统IO分为:阻塞型,非阻塞同步型,非阻塞异步型

阻塞型IO:拿read方法来举例,现在系统的一个线程调用了read方法,这时控制权只有等到read调用结束后才会回到这个线程手里(调用read函数的代码就会一直停留在那里,直到它所处理的socket缓存中有数据来)。这时这个调用者(此线程)就被阻塞了,这其中的这段时间,这个线程做不了任何其他的事情。

非阻塞同步型IO:同样是read。现在系统的一个线程调用了read方法,这时控制权会立即返回到这个线程手里(此线程不会一直停留在那里)。这时线程的业务逻辑会得到两种结果,第一:调用成功;第二:返回错误或者当前资源不可用,等一下或者等会再试一次。read函数的话,如果当前处理的socket没有数据可以读取,则立即返回,告诉调用者:现在还没有数据,等会再试。

非阻塞异步型IO:这种形式和非阻塞同步型IO的不同之处在于:调用者(线程)在调用函数时:调用函数在立即返回的同时,还告诉调用者,这次请求已经开始了,系统会使用其他的资源或者是线程来完成此次调用操作,并会在完成后告知调用者(回调函数)。

下面理解一下两种模式:Reactor and Proactor
    在理解这两种模式之前,先看一个名词:事件分享器。事件分享器的作用是:将那些读写事件源分发给各个读写事件的处理者,我们开发人员在开始的时候需要在事件分享器中注册那些感兴趣的事件,并提供相应的处理者或者是回调函数,事件分享器在适当的时候会将事件分发给到处理者或者是回调函数。

    Reactor模式:基于同步IO,事件分享者等待某个事件发生(文件描述符可读写或者socket可读写)。事件分享者就把这个事件传给事件注册的处理者或回到函数,让后者来处理实际的读写操作

    Proactor模式:基于异步IO,事件处理者(或者事件分享器代为发起)直接发起一个异步读写操作(请求),而实际的工作是由操作系统来完成。事件处理者需要提供参数:用于存放读到数据的缓存区,读的数据大小,或者用于存放外发数据的缓存区,请求完后的回调函数等信息。事件分享器得知这个请求后,默默的在后面等待这个请求完成,然后转发完成事件给相应的事件处理者或者是回调函数。

    看看两种模式的区别:
Reactor的做法:
1,某个事件处理者宣称它对某个socket上的读事件很感兴趣。
2,事件分享者等着这个事件的发生
3,当事件发生了,事件分享器被唤醒,负责通知事先那个事件的处理者。
4,事件处理者收到事件发生的消息后,就去socket上面读取数据了。
5,如果还需要读取这个socket上面的数据,它再次宣称对这个socket上的读事件感兴趣。
   一直重复上面的步骤。
Proactor的做法:
1,事件处理者直接发起一个读取操作的请求,这时事件处理者不会去关心这个读事件的完成情况。只是等着操作系统完成这个读事件后,回来告诉事件处理者就行了。
2,事件分享器等着这个读事件完成
3,当事件分享器在等待这个事件完成的时候,其实操作系统已经在开始干活了,它从目标读取数据,放入到用户提供的缓冲区中,最后告诉事件分享器,读取事件完成了。
4,事件分享器告诉事件处理者,事件已经完成了。
5,事件处理者这时发现数据已经在自己提供的缓冲区里面了,这样就可以进去后续的业务处理了。
   如果可以,事件处理者还可以发起一个同样的请求,重复上面的步骤。

分享到:
评论

相关推荐

    reactor-demo

    在IT行业中,Reactor模式是一种常见的并发编程设计模式,它...在实践中,你还可以进一步探讨如何利用多线程、异步IO或者其他并发模型来增强Reactor的性能,例如使用Proactor模式(异步事件驱动)或者结合Actor模型等。

    ACE自适配通讯环境课件

    此外,ACE还包含了一些框架,如Reactor/Proactor模式,用于事件驱动编程;Service Configuration用于动态配置服务;Stream框架则支持流处理。 跨平台支持是ACE的一大特点,它能在众多操作系统上运行,包括各种...

    anyQ服务器源代码

    3. **并发处理**:由于服务器需要同时处理大量并发请求,因此可能会使用到多线程、异步IO或者事件驱动的编程模型,例如Reactor或Proactor模式。 4. **负载均衡与分布式**:大型的即时通信系统往往需要分布式部署,...

    C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks

    本书《C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks》是C++网络编程系列书籍的第二卷,旨在帮助C++程序员通过使用ACE(Adaptive Communication Environment)框架和框架化思想来...

    ACE开发指南(初级).

    本指南将重点介绍ACE框架的基础知识、Reactor模型、Proactor模型以及Task框架,并通过示例来展示如何使用这些模型来构建简单的服务器和客户端程序。 ##### 2.3 获取ACE ACE可以从其官方网站下载最新稳定版本。在本...

    ACE 概述.pdf

    - Reactor 和 Proactor 框架:实现事件驱动编程模型,简化了异步 I/O 的处理。 - Acceptor-Connector 框架:分离服务初始化逻辑,便于维护和扩展。 - Task 框架:如 Active Object 和 Half-Sync/Half-Async,支持...

    realtimeOperations

    使用事件驱动架构,如Reactor或Proactor模式,可以提高实时系统的响应速度。Python的`asyncio`库支持异步编程,可以构建高效的事件循环。 10. **Monitoring and Logging**: 实时操作需要监控系统性能和日志,...

    asio 开发文档教程

    - **The Proactor Design Pattern: Concurrency Without Threads**:讨论了proactor模式及其如何在不使用线程的情况下实现并发。 - **Threads and Asio线程与asio**:阐述了asio如何与多线程环境协同工作。 - **...

    ACE入门教程

    - **事件多路分离和分发框架**: 实现了Reactor模式和Proactor模式,支持异步I/O处理。 - **连接建立和服务初始化框架**: 实现了Acceptor-Connector模式,用于处理网络连接请求。 - **并发框架**: 提供了Task框架...

    Evaluation of Parallel Design Patterns for Message Processing Systems on Embedded Multicore Systems-计算机科学

    Evaluation of Parallel Design Patterns for MessageProcessing Systems on Embedded Multicore SystemsRonald ...– Reactor– Half-Sync/Half-Async– Leader/Followers– Proactor• All patterns have been e

    后台开发核心技术面试集锦

    - **Reactor与Proactor** - Reactor模式处理事件的发生,而Proactor模式处理事件的完成。 - **域名系统DNS** - DNS使用UDP协议来解析域名到IP地址。 - **Web页面请求过程** - 包括DNS解析、建立TCP连接、发送...

    asioref-1.12.0.pdf

    asio通过"Strand"来实现无显式锁定的线程使用,即可以实现多线程安全,但不需要程序员去手动编写同步代码。asio使用缓冲区进行数据的读写操作,对于流式读写和短读短写等情景都有很好支持。此外,asio还提供了基于...

    ACE继承层次图

    - **ACE_Select_Reactor_Notify**:实现了基于select/poll的I/O模型,适用于少量连接的情况。 2. **ACE_Service_Object**:表示一个可以被服务管理器管理的服务对象。 - **ACE_Task**:代表一个可执行任务,支持...

    boost asio 网络编程

    1. **前摄器(Proactor)模式**:这是 Boost Asio 中的一个核心设计理念,允许程序在 I/O 操作完成后被通知。这与传统的反应器(Reactor)模式不同,后者是在 I/O 准备就绪时被通知。 2. **线程和 Boost Asio**:...

Global site tag (gtag.js) - Google Analytics