• 反应器Reactor和主动器Proactor的区别


    参考书籍《C++11工程级应用》第16章

    事件驱动设计在服务器开发中非常流行,其中常见的有两种:反应器(Reactor)和主动器(Proactor)

    1. 反应器

    反应器需要应用程序先注册事件处理器,然后启动反应器的事件循环,不断地检查是否有就绪地I/O事件,当有就绪事件时,同步事件多路分解器将会返回到反应器,反应器会将事件分发给多个句柄的回调函数以处理这些事件。

    反应器的一个特点是,具体的处理程序并不调用反应器,而是由反应器来通知处理程序去处理事件,这种方式也被称为“控制反转”,又称为“好莱坞原则”。

    反应器模式大概的流程如下:

    1)应用程序在反应器上注册具体事件处理器,处理器提供内部句柄给反应器。

    2)在注册之后,应用程序开始启动反应器事件循环。反应器将通过select等待发生在句柄集上的就绪事件。

    3)当一个或多个句柄变成就绪状态时(比如某个socket读就绪了),反应器将通知注册的事件处理器。

    4)事件处理器处理就绪事件,完成用户请求。

    反应器模式使用起来相对直观,但它不能同时支持大量的客户请求或者耗时过长的请求,因为它串行化了所有的事件处理过程。而Proactor在这方面做了改进。

    2. 主动器

    1)应用程序需要定义一个异步执行的操作,例如,socket的异步读/写。

    2)执行异步操作,异步事件处理器将异步请求交给操作系统就返回了,让操作系统去完成具体的操作,操作系统在完成操作后,会将完成事件放入一个完成事件队列

    3)异步事件分离器会检测完成事件,若检测到完成事件,则从完成事件队列中取出完成事件,并通知应用程序注册的完成事件处理函数去处理。

    4)完成事件处理函数处理异步操作的结果。

    主动器和反应器的主要区别就是,主动器中,真正的读写是操作系统完成的。

    具体介绍可以看这本书《面向模式的软件架构:卷2》

  • 相关阅读:
    数据结构与算法分析-二叉堆
    数据结构与算法分析-AVL树
    数据结构与算法分析-二叉查找树
    优秀程序员应具备的15个特性
    2016年1月22日 收盘后美加的走势
    2016年1月8日 12月非农数据
    Replace into 与Insert into on duplicate key update的区别
    MYSQL视图的学习笔记
    postgresql创建用户
    连接postgresql数据库
  • 原文地址:https://www.cnblogs.com/jdbc2nju/p/16039774.html
Copyright © 2020-2023  润新知