美文网首页
Libevent学习笔记之I/O框架概述

Libevent学习笔记之I/O框架概述

作者: 望_天 | 来源:发表于2018-11-04 14:43 被阅读0次

    基于Reactor模式实现的I/O框架库包含了如下几个组件:句柄(Handler)、事件多路分发器(EventDemultiplexer)、事件处理器(EventHandler)和具体的事件处理器(ConcreteEventHandler)、Reactor。

    1、句柄

    I/O框架库要处理的对象,即I/O事件、信号以及定时事件,同一称为事件源。句柄的作用是当内核检测到就绪事件时,它将通过句柄来通知应用程序这一事件。

    2、事件多路分发器

    事件的到达是随机的、异步的。我们无法预知程序何时收到一个客户的连接请求,又抑或收到一个暂停的信号。所以程序需要循环的等待并处理事件,即事件循环。事件循环中,等待事件一般采用I/O复用技术实现。I/O框架库一般将系统支持的各种I/O复用系统调用封装成统一接口,称为事件多路分发器。其中事件多路分发器的demultiplex方法是等待事件的核心函数,内部调用select、poll、epoll_wait等函数。

    其次,事件多路分发器中的register_event和remove_event方法,用于事件多路分发器添加事件和删除事件。

    3、事件处理器和具体事件处理器

    事件处理器执行事件对应的业务逻辑。通常包含一个或多个handle_event回调函数,这些回调函数在事件循环中被执行。I/O框架库提供的事件处理器通常是一个接口,用户需要继承它来实现自己的事件处理器,即具体事件处理器。

    事件处理器一般会提供一个get_handle方法,返回与该事件处理器关联的句柄。当事件多路分发器检测到有事件发生时,通过通知句柄来通知应用程序。所以将句柄与事件处理器绑定,能在事件发生时获取到正确的事件处理器。

    4、Reactor

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

    1、handle_events:执行事件循环。重复的等待事件,然后依次处理所有就绪事件对应的事件处理器。

    2、register_handler:调用事件多路分发器的register_event方法来向事件多路分发器注册一个事件。

    3、remove_handler:调用事件多路分发器的remove_event方法来删除事件多路分发器中的一个事件。

    以下是I/O框架工作时序

    参考文献:

    《Linux高性能服务器编程》

    相关文章

      网友评论

          本文标题:Libevent学习笔记之I/O框架概述

          本文链接:https://www.haomeiwen.com/subject/idbrxqtx.html