12章 高性能I/O框架库Libevent

  • Linux服务器必须处理的三类时间:IO事件、信号、定时事件
  • 处理这三类事件必须考虑三个问题:
    • 统一事件源:使用IO复用系统来管理所有事件
    • 可移植性:不同操作系统有不同的IO复用方式,Solaris的dev/poll,FressBSD的kqueue,Linux的epoll。
    • 对并发编程的支持。

libevent简介

Libevent 有几个显著的亮点:

  • 事件驱动(event-driven),高性能;
  • 轻量级,专注于网络,不如ACE那么臃肿庞大;
  • 源代码相当精炼、易读;
  • 跨平台,支持Windows、Linux、*BSD和Mac Os;
  • 支持多种I/O多路复用技术, epoll、poll、dev/poll、select和kqueue等;
  • 支持I/O,定时器和信号等事件;
  • 注册事件优先级;

Libevent已经被广泛的应用,作为底层的网络库;比如memcached、Vomit、Nylon、Netchat等等

12.1 I/O框架库概述

  • I/O框架库以库函数的心事,封装了较为底层的调用,给应用系统提供了一组更便捷的接口。
  • 基于Reactor模式的I/O框架库包含:
      1. 句柄
      • 由于IO框架库需要处理IO事件、信号和定时事件被称为统一事件源,一个句柄绑定了一个事件源.
      • 对于IO事件,句柄在Linux中的具体表现是文件描述符
      • 对于信号,句柄在Linux中的具体表现是信号值
      • 当内核检测到就绪事件后,它会通过句柄来通知应用程序。
    • 2 事件多路分发器[EventDemultiplexer]

      • 事件的到来是随机的、异步的。
      • IO框架库会将系统支持的各种IO复用系统调用封装成统一的接口,称为事件多路分发器。
      • demultiplex方法是等待事件的核心函数,内部调用是select、poll和epoll_wait等函数。
      • register_event:从事件多路分发器添加事件
    • 3 事件处理器和具体事件处理器

      • 事件处理器指向事件对于的业务逻辑。
      • 通常包含一个或多个handle_event回调函数,这些函数在事件循环中被执行。
      • 用户需要继承IO框架库提供的事件处理器,来实现自己的事件处理器,也就是具体事件处理器
      • IO框架库中的事件处理器会被声明为虚函数。
      • get_handler方法:返回与该事件相关联的句柄。当事件发生时,通过句柄来通知应用程序。
    • 4 Reactor

      • Reactor是IO框架库核心:
      • handle_events方法:执行事件循环。重复如下过程:等待事件,依次处理所有就绪事件对应的事件处理器。
      • rigister_handler:调用事件多路分发器的register_event方法来往事件多路分发器注册事件。
      • remove_handler:调用事件多路分发器的remove_event方法来删除事件多路分发器注册事件。
        在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值