libevent 库学习

Posted mysky007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了libevent 库学习相关的知识,希望对你有一定的参考价值。

evutil:

  用于抽象不同平台网络实现差异的通用功能。

 

event和event_base:

  libevent的核心,为各种平台特定的、基于事件的非阻塞 IO后端提供抽象API,让程序可以知道套接字何时已经准备好,可以读或者写,并且处理基本的超时功能,检测OS信号。用 libevent 函数之前需要分配一个或者多个 event_base 结构体。每个event_base 结构 体持有一个事件集合,可以检测以确定哪个事件是激活的。如果设置 event_base 使用锁,则可以安全地在多个线程中访问它 。然而,其事件循环只能 运行在一个线程中。如果需要用多个线程检测 IO,则需要为每个线程使用一个 event_base。默认情况下,event_base_loop()函数运行 event_base 直到其中没有已经注册的事件为止。执行循环的时候 ,函数重复地检查是否有任何已经注册的事件被触发 (比如说,读事件 的文件描述符已经就绪,可以读取了;或者超时事件的超时时间即将到达)。如果有事件被触发,函数标记被触发的事件为 “激活的”,并且执行这些事件

vent_base处理过程主要如下:

  1.调用event_base_new()创建一个event_base

  2.注册了某些事件的 event_base

  3.调用event_base_loop()或者event_base_dispatch()函数,循环等待事件并且通知事件的发生

  4.调用event_base_loopexit()或者event_base_loopbreak()移除所有已注册的事件之前停止活动的事件循环

  5.使用完 event_base 之后,使用event_base_free()进行释放

 

bufferevent:

  为libevent基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外,还让程序可以请求缓冲的读写操作,可以知道何时IO已经真正发生。( bufferevent接口有多个后端, 可以采用系统能够提供的更快的非阻塞 IO方式,如Windows中的IOCP。)


evbuffer:在bufferevent层之下实现了缓冲功能,并且提供了方便有效的访问函数

 

以上是关于libevent 库学习的主要内容,如果未能解决你的问题,请参考以下文章

libevent学习过程

libevent的入门学习-库的安装

libevent学习笔记(参考libevent深度剖析)

Libevent 学习笔记 ——Libevent 2.0安装与简单演示样例

libev整体设计

libevent学习,从3个例子开始