![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
libevent
Function_18
这个作者很懒,什么都没留下…
展开
-
libevent 安装
libevent源码官网libevent. 本学习章节我都是以libevent-1.4.14b-stable 版本, 学习比较简单的但是使用和功能上差距并不大.安装源码下载并解压 : tar -zxvf /your path/libevent-1.4.14b-stable.tar.gz进入目录 : cd libevent-1.4.14b-stable源码目录下 : ./conf...原创 2019-02-23 13:28:31 · 518 阅读 · 0 评论 -
libevent IO多路复用之epoll
libevent是事件驱动, 同步而非阻塞的. 为了保证非阻塞我们在前面已经看到过多次了, 设置文件描述符为非阻塞. libevent内部也是为了满足非阻塞所以集成了一系列的多路复用函数, 但并非每个都会使用. libevent会根据不同系统选择不同的复用函数. 这里我们主要分析linux的复用机制(epoll).统一接口不管是在windows还是linux, 也不管使用select还是epo...原创 2019-02-24 15:56:13 · 661 阅读 · 0 评论 -
event 信号注销
其实信号的注销过程与event的注销过程也很类似, 本篇就不再过多的就行叙述, 将源码注释贴出来即可.信号注销evsignal_del 函数// 信号的注销intevsignal_del(struct event *ev){ struct event_base *base = ev->ev_base; struct evsignal_info *sig = &base...原创 2019-02-24 15:55:13 · 376 阅读 · 0 评论 -
event 信号注册和激活
上节咱们分析了信号的初始化以及最重要的socket pair以及使用原因. 本节继续来分析event信号的注册和激活功能, 其实上一节最后分析socket pair已经提到了一些.信号注册信号调用evsignal_add函数来实现信号的注册, 有点向event调用event_add函数.intevsignal_add(struct event *ev){ int evsignal; ...原创 2019-02-24 15:54:31 · 464 阅读 · 0 评论 -
event 信号初始化
上一节我们对信号evsignal_info作了一个简单的分析, 本节就如同前面分析event功能函数时一样的来分析signal操作.信号初始化evsignal_init函数实现对一个信号的初始化操作. 源码位置: signal.cintevsignal_init(struct event_base *base){ int i; /* * Our signal handler ...原创 2019-02-24 15:53:54 · 569 阅读 · 0 评论 -
evsignal_info 结构
前面我们对整个event的功能做了比较全面的分析, 但是主要分析事件都是 IO或者定时事件, 却没有分析过信号又是怎么集成到就绪队列中的.evsignal_info结构evsignal_info在evsignal.h中typedef void (*ev_sighandler_t)(int);struct evsignal_info { // 读事件使用的 event 结构 struc...原创 2019-02-24 15:53:18 · 332 阅读 · 0 评论 -
event 激活
在之前我们分析了event的注册和注销, 而本节就来分析event又是如何被激活的.event 激活event_active 函数// 将 event 事件主动设置到活动队列中voidevent_active(struct event *ev, int res, short ncalls){ /* We get different kinds of events, add them ...原创 2019-02-23 13:39:42 · 735 阅读 · 0 评论 -
event 非正常退出主循环
event_loopbreak 函数intevent_loopbreak(void){ return (event_base_loopbreak(current_base));}intevent_base_loopbreak(struct event_base *event_base){ if (event_base == NULL) return ...原创 2019-02-23 13:38:56 · 1088 阅读 · 0 评论 -
evnet 主循环
搞清楚前面已经分析的事件的注册和注销两方面, 相信你对libevent已经有了一定的认识了, 而本节将来分析调用过程中很重要的功能, 他叫做主循环.主循环主要执行的工作就是将就绪队列中的事件全部激活执行调度. 感觉是不是重心啊? 激活事件耶, 就是执行回调呀. 但是我们的event和event_base中可以包含的事件可以是 IO, 信号, 定时那么这些具体怎么柔和到一起进行处理呢? 接下来我们...原创 2019-02-23 13:37:27 · 574 阅读 · 0 评论 -
event 注册和注销
本节我们依旧来分析event的操作, 接着上节没有讲完的关于event的注册和注销两个功能的实现.event 注册依旧来看一个event 注册函数的原型int event_add(struct event *ev, const struct timeval *tv);相比event_set函数event_add真的很干净.参数ev : 将要注册的event事件. 其实实际注册的是e...原创 2019-02-23 13:36:08 · 786 阅读 · 0 评论 -
event 初始化
在前面我们对整个libevent重要的核心(event和event_base)结构做了分析, 处于茫然你现在跟着再来看一下event的初始化过程, 以及事件的注册/注销过程.event 初始化event的成员有很多, 所以我们需要对event初始化操作做一个简单的封装才行, 不然用户怎么可能不会记错记混这些参数呢.event初始化函数是 event_set.void event_set(s...原创 2019-02-23 13:35:00 · 708 阅读 · 0 评论 -
event_base 结构
event_base 结构上一节我们具体分析了关于event结构, 其中涉及到了event_base所以本节就来分析与event同样重要的结构. event_base也就是Reactor模式中的反应器, 就是管理整个事件的注册, 删除等主要操作.event_base结构该结构在event-internal.h中.struct event_base { const struct event...原创 2019-02-23 13:33:16 · 527 阅读 · 0 评论 -
event 结构
libevent是基于事件驱动的, 事件驱动主要是由event_base负责, 它是负责事件的各种处理(注册, 删除等); 而event则是libevent的核心, 管理事件驱动.event结构其实说的一些东西只有看过了libevent大部分源码后才容易理解, 所以最开始的还都是从源码入手, 理解清楚了整个框架才能明白其中的意义.struct event { // 三种队列 // 注...原创 2019-02-23 13:31:25 · 723 阅读 · 0 评论 -
Reactor 反应堆
Reactor模式也叫做反应堆. 其中心思想 : 将要处理的IO事件注册到一个中心处理接口的IO多路复用上, 由回调函数处理事件. 其实就是将select, poll, epoll等使用统一接口进行封装, 注册其回调函数, 等待事件到来时直接调用回调函数.(图片来源)处理机制普通函数调用机制普通函数的调用机制其实就是函数被调用, 将参数封装成栈帧压栈 -> 函数调用 -&gt...原创 2019-02-23 13:30:21 · 567 阅读 · 0 评论 -
libevent 文件结构
libevent 文件结构前言在分析libevent之前, 先对整个libevent的文件结构有一个基本的了解才行, 有了整体的了解才能清楚每个功能的位置.文件结构事件的头文件event.h : 事件类型的宏定义, 接口函数的声明, 以及最重要的event, event_base以及evbueffer, bufferevent结构体, 其中evbuffer结构的功能在函数evbu...原创 2019-02-23 13:29:17 · 433 阅读 · 0 评论 -
libevent 目录
自己将libevent的基本功能实现的地方差不多看了几次, 其实最初写这些博客的时候还是有好些地方没有理解透彻, 所以写了又删掉了一些. 最终感觉大致还是讲清楚才决定用于分享, 在看源码的时候真的有时会很痛苦, 主要里面很多的逻辑关联以及函数之间的关联.最开始看的时候根本摸不到头脑, 网上都是分析event.h开始的, 但是我看了很久也没有搞明白里面几个结构的关系, 都是后面画了一些结构以及调用...原创 2019-02-24 16:01:49 · 610 阅读 · 0 评论