码迷,mamicode.com
首页 > 其他好文 > 详细

libevent 库学习

时间:2020-02-12 13:08:43      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:请求   检测   标记   分配   文件描述符   bre   patch   读写   集合   

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 库学习

标签:请求   检测   标记   分配   文件描述符   bre   patch   读写   集合   

原文地址:https://www.cnblogs.com/mysky007/p/12298260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!