随笔分类 -  libevent源码分析

摘要:接上文libevent(九)bufferevent 上文主要讲了bufferevent如何监听读事件,那么bufferevent如何监听写事件呢? 对于一个fd,只要它的写缓冲区没有满,就会触发写事件。 一般情况下,如果不向这个fd发送大量的数据,它的写缓冲区是不会满的。 所以,如果一开始就监听写事 阅读全文
posted @ 2017-11-14 11:09 Sawyer Ford 阅读(622) 评论(2) 推荐(0)
摘要:bufferevent,带buffer的event 下面简单分析bufferevent相关函数(示例DEMO) bufferevent_socket_new 函数做了4件事: backend结构如下: bufferevent_setcb 该函数主要设置用户回调函数。 bufferevent_enab 阅读全文
posted @ 2017-11-13 18:05 Sawyer Ford 阅读(1069) 评论(1) 推荐(0)
摘要:激活事件添加流程 事件发生后,需要把对应的event加入到激活事件队列中。 整个流程如下: 对于定时器事件,在timeout_process过程中,会将事件从最小堆中删除。 激活事件处理流程 在even_base_loop中,底层dispatch返回后的核心问题就是处理激活事件。 简单分析下even 阅读全文
posted @ 2017-10-23 10:10 Sawyer Ford 阅读(715) 评论(0) 推荐(0)
摘要:libevent通过socketpair实现对信号事件的监听。 还记得event_base吗? evsig_info结构如下: evsig_init 在event_base初始化阶段会完成socketpair的创建。 可以看到,sig.ev_signal关联了sig.ev_signal_pair[1 阅读全文
posted @ 2017-10-20 11:36 Sawyer Ford 阅读(2013) 评论(0) 推荐(0)
摘要:libevent是如何实现事件监听的呢? 在Linux,libevent的底层实现是epoll,因此实现事件监听的方式就是,把需要监听的fd加入epoll中。 I/O事件 定时器事件 定时器事件没有fd,那么如何监听呢? 这里先看下epoll_wait这个函数 libevent采用的方法是:每次运行 阅读全文
posted @ 2017-10-20 09:19 Sawyer Ford 阅读(510) 评论(0) 推荐(0)
摘要:libevent使用struct event来表示一个事件。 具体字段含义不再细说,可参考event_assign进行理解。 int event_assign(struct event *ev, struct event_base *base, evutil_socket_t fd, short e 阅读全文
posted @ 2017-10-17 17:30 Sawyer Ford 阅读(384) 评论(0) 推荐(0)
摘要:接上文libevent(三)event_base event_io_map event_list是双向链表,min_heap是小根堆,那event_io_map是什么呢? 在Linux系统中,event_io_map就是event_signal_map。 event_signal_map 上一张镇楼 阅读全文
posted @ 2017-10-17 13:54 Sawyer Ford 阅读(279) 评论(0) 推荐(0)
摘要:libevent能够处理三种事件: I/O、定时器、信号。 event_base 统一管理所有事件。 eventop 用于描述event_base的底层实现机制 libevent支持多种平台,因此定义了一个全局数组来存放多个eventop。 Linux平台的I/O多路复用机制是epoll,对应epo 阅读全文
posted @ 2017-10-17 10:38 Sawyer Ford 阅读(749) 评论(0) 推荐(0)
摘要:本文主要研究libevent中用来存储事件的两个结构体。 尾队列 具体定义位于queue.h中。 从定义可以看出,尾队列是一个双向链表,具体表现为: 一个小DEMO: #include <stdio.h> #include <stdlib.h> #include <sys/queue.h> #def 阅读全文
posted @ 2017-10-17 09:44 Sawyer Ford 阅读(1051) 评论(0) 推荐(0)
摘要:开始研究libevent,使用的版本是2.0.22。 实现一个定时器:每2秒执行一次printf。 参考资料: libevent分析 - sparkliang的专栏 - 博客频道 - CSDN.NET Libevent源码分析 - luotuo44的专栏 - 博客频道 - CSDN.NET 阅读全文
posted @ 2017-10-17 09:34 Sawyer Ford 阅读(2699) 评论(0) 推荐(0)