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:删除事件

     

  • 相关阅读:
    初识ES5、ES6
    WEB前端性能优化之三——JavaScript优化
    Web前端浏览器兼容问题
    HTML5新特性
    WEB前端性能优化之二——css优化
    WEB前端性能优化之一——网页级优化
    CSS的一些案例和坑
    bootstrap插件--select2.js--一个基于jQuery的替换框
    boostrap插件---typeahead.js---输入提示下拉菜单
    border-radius:50%,在安卓上存在兼容问题
  • 原文地址:https://www.cnblogs.com/raichen/p/5039126.html
Copyright © 2011-2022 走看看