zoukankan      html  css  js  c++  java
  • 12 高性能I/O框架库Libevent

    这里不讲Libevent库的具体内容了,从宏观上对I/O库整体做个介绍

    Linux服务器程序必须处理三类事件:I/O事件,信号和定时事件

    • 统一事件源:统一处理这三类事件既能使代码简单易懂,又能避免一些潜在的逻辑错误。统一事件源的一般方法——利用I/O复用系统调用来管理所有事件
    • 可移植性:不同操作系统具有不同的I/O复用方式
    • 对并发编程的支持:支持多进程多线程

    I/O框架库以库函数的形式,封装了较为底层的系统调用。各种I/O框架库实现原理基本相似,要么以Reactor模式实现,要么以Proactor模式实现,要么同时使用这两种模式。

    举例来说,基于Reactor模式的I/O框架库包含如下几个组件:

    句柄(Handle)、事件多路分发器(EventDemultiplexer)、事件处理器(EventHandler)、和具体事件处理器(ConcretrEventHandler)、Reactor。这些组件关系如下:

    句柄:I/O框架库要处理的对象,即I/O事件,信号和定时事件,统一成为事件源。一个事件源通常和一个句柄绑定在一起。句柄的作用是,当内核检测到就绪事件,它将向句柄来通知这一事件。在Linux环境下,I/O事件对应的句柄是文件描述符,信号事件对应的句柄就是信号值

    事件多路分发器:事件到来是随机的,异步的,我们无法预知程序合适收到一个客户的链接请求。所以程序需要循环地等待并处理事件,这就是事件循环。事件循环中,等待事件一般使用I/O复用技术实现。I/O框架库一般将系统支持的各种I/O复用系统调用封装成统一的接口,成为多路事件分发器。内部调用的是select、poll、epoll_wait函数

    事件处理器和具体事件处理器:事件处理器执行事件对应的业务逻辑。他通常包含一个或多个handle_event回调函数。I/O框架库通常提供一个接口,用户需继承它实现在籍的事件处理器,即具体事件处理器。因此事件处理器中的回调函数一般被声明为虚函数,以支持用户扩展

    Reactor:I/O框架库的核心提供几个主要方法是

    • handle_events:该方法执行事件循环
    • register_handler:注册事件
    • remove_handler:删除事件

     

  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/raichen/p/5039126.html
Copyright © 2011-2022 走看看