zoukankan      html  css  js  c++  java
  • reactor设计模式

    reactor介绍
    reactor的工作模式就像它的名字一样,是一种反射模式,当事件发生时,根据发生的事件调用注册的处理器。
    Reactor的优点和应用
    Reactor最常用于非阻塞的socket
    传统的设计是一种同步的停等协议,读写操作执行后要等待当前fd的下一次可读/写事件,这期间什么都不能干,程序就阻塞在事件上。
    有了Reactor以后的设计,告诉Reactor你所关注的事件和事件发生后的处理器,Reactor充当一个中间人的角色,非阻塞的检测事件是否发生,如果发生就调用注册的处理器。与传统设计不同的是Reactor可以同时非阻塞的检测多个I/O上的事件并处理,大大提高了程序运行效率。
    以ev_io为例,说明reactor模式
    初始化事件处理器
    ev_io_init
    注册事件处理器,把事件处理器添加到ev_loop的观察列表中
    ev_io_start
    移除事件处理器,把事件处理器从ev_loop的观察列表中移除
    ev_io_stop
    reactor主循环,I/O多路复用和事件分发器
    ev_run
    {
        //检查关注fd列表fdchanges,新增加或者修改的fd都保存在这个列表中
        //通过fd查找注册的事件处理器ANFD,检查事件处理器的关注事件
        fd_reify

        调用跨平台的多路复用api,封装过的,epoll的封装在ev_epoll.c
        backend_poll    

        把事件加入待处理列表
        ev_feed_event    

        //调用所有的待处理事件处理器
        ev_invoke_pending
    }
    reactor模式的主要步骤:
    1.client通过ev_io_init和ev_io_start接口把fd和事件处理器、套接字、关注的事件加入到reactor中
    2.Reactor的主循环调用I/O多路复用API获取就绪事件,并把就绪事件添加到就绪列表中
    3.事件分发器根据就绪列表中的fd,查找并调用client注册的事件处理器
  • 相关阅读:
    Leetcode题库——7.反转整数
    (tomcat)tomcat启动过慢
    (tomcat)查看tomcat安装路径
    (JDK)cmd中只能执行java不能执行javac命令
    (课)学习进度报告二
    (数据导入)csv文件数据导入数据库
    (编码转换)转换文件编码
    (python开发)用cmd下载Python的第三方库所遇问题及解决方法
    (课)学习进度报告一
    (课)淘宝网质量属性场景
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/5636364.html
Copyright © 2011-2022 走看看