![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
libevent源码学习
HerofH_
加油啊咸鱼!
展开
-
libevent源码学习(19):缓冲区抽象bufferevent
目录引言bufferevent结构bufferevent_private结构体bufferevent结构体创建一个基于socket的bufferevent启动buffereventEVUTIL_UPCAST宏函数bufferevent水位设置bufferevent从fd中读取数据bufferevent向fd中写入数据从bufferevent中读出数据...原创 2019-08-30 15:47:54 · 917 阅读 · 0 评论 -
libevent源码学习(18):缓冲区结构evbuffer
目录evbuffer结构体evbuffer_chain结构evbuffer及evbuffer_chain的创建向evbuffer中插入一个evbuffer_chain向evbuffer中添加数据向evbuffer的尾部添加数据在evbuffer的头部插入数据从evbuffer中提取数据拷贝式提取数据提取后删除数据evbuffer预留一定大小的空间从f...原创 2019-08-27 18:16:45 · 1196 阅读 · 0 评论 -
libevent源码学习(17):缓冲管理框架
目录Libevent缓冲区类型Libevent缓冲区结构缓冲区的读出与写入缓冲区的读入与写出缓冲区水位机制缓冲区回调机制延迟回调机制Libevent缓冲区类型 Libevent中提供了多种类型的缓冲区:基于套接字的缓冲区、针对Windows IOCP的bufferevent、在传输和接收数据之前进行数据处理(比如压缩)的过滤型缓冲区和成对传输的缓冲区...原创 2019-08-26 11:21:09 · 478 阅读 · 0 评论 -
libevent源码学习(16):通知唤醒主线程、条件变量的等待与唤醒
目录唤醒事件机制唤醒机制相关结构体创建唤醒event次线程唤醒主线程条件变量等待与唤醒以下源码均基于libevent-2.0.21-stable。 在前面的文章中,把Libevent对三种不同类型event的创建、添加、激活到处理过程基本上就讲的差不多了,接下来就讲一下其它的问题。目前版本Libevent是支持多线程的,既然是多线程,就会出现一系列与线程安全...原创 2019-07-31 17:20:48 · 1079 阅读 · 1 评论 -
libevent源码学习(15):信号event的处理
目录信号event处理流程与信号event相关的结构体初始化工作创建一个信号event添加一个信号event信号回调函数信号event的激活 Libevent中的event,主要分为三大类:io读写event、超时事件以及信号event。前面的文章对前两类的event都进行了分析,下面就来说一下Libevent是如何处理信号event的。信号e...原创 2019-07-29 23:54:03 · 786 阅读 · 0 评论 -
libevent源码学习(14):IO复用模型之epoll的封装
目录Libevent提供的epoll后端结构体初始化epoll_init何时调用epoll_init事件添加epoll_nochangelist_add何时调用epoll_nochangelist_add事件删除epoll_nochangelist_del何时调用epoll_nochangelist_del事件监听epoll_dispatch为什么evmap_i...原创 2019-07-26 20:18:28 · 837 阅读 · 1 评论 -
libevent源码学习(13):事件主循环event_base_loop
目录开启事件主循环执行事件主循环校对时间阻塞/非阻塞处理激活队列中的event事件主循环的退出event_base_loopexitevent_base_loopbreak开启事件主循环 在libevent中,事件主循环的作用就是执行一个循环,在循环中监听事件以及超时的事件并且将这些激活的事件进行处理。libevent提供了对用户开放了两...原创 2019-07-25 16:57:35 · 3276 阅读 · 2 评论 -
libevent源码学习(12):超时管理之common_timeout
目录前言common_timeout的作用common_timeout的结构定义common_timeout与一般timeout的区分获取common_timeout在common_timeout_queues中的下标判断一个timeval是否为common_timeout判断两个timeval是否是同样的common_timeout获取common_timeout...原创 2019-07-25 16:57:25 · 1102 阅读 · 1 评论 -
libevent源码学习(11):超时管理之min_heap
目录min_heap的定义向min_heap中添加eventmin_heap中event的激活以下源码均基于libevent-2.0.21-stable。 在前文中,分析了小顶堆min_heap这一数据结构,并提到了Libevent就是利用min_heap来实现定时器的,接下来就分析一下min_heap是如何实现定时器的。 对于每一个需要监听的eve...原创 2019-07-25 16:56:55 · 524 阅读 · 0 评论 -
libevent源码学习(10):min_heap数据结构解析
目录min_heap类型定义min_heap函数构造/析构函数及初始化判断event是否在堆顶判断两个event之间超时结构体的大小关系判断堆是否为空及堆大小返回堆顶event分配堆空间堆元素的上浮堆元素的下沉堆插入元素堆删除元素弹出堆顶元素以下源码均基于libevent-2.0.21-stable。 在libevent中,使...原创 2019-07-25 16:56:29 · 775 阅读 · 0 评论 -
libevent源码学习(9):事件event
目录在event之前需要知道的event_baseevent结构体创建/注册一个event向event_base中添加一个event设置event的优先级激活一个event删除一个event获取指定event的状态纯超时event以下源码均基于libevent-2.0.21-stable。 有了event_base作为Reactor事件处理模...原创 2019-07-25 16:55:51 · 758 阅读 · 0 评论 -
libevent源码学习(8):event_signal_map解析
目录event_signal_map结构体向event_signal_map中添加event激活event_signal_map中的event删除event_signal_map中的event以下源码均基于libevent-2.0.21-stable。 在前文中分析了event_io_map,在windows环境下event_io_map定义为哈希表结构,而在非...原创 2019-07-25 16:54:54 · 489 阅读 · 0 评论 -
libevent源码学习(7):event_io_map——哈希表数据结构解析
目录event_io_map哈希表操作函数hashcode与equals函数哈希表初始化哈希表元素查找哈希表扩容哈希表元素插入哈希表元素替换哈希表元素删除自定义条件删除元素哈希表第一个非空元素哈希表下一个元素释放哈希表向event_io_map中添加event激活event_io_map中的event删除event_io_map中的e...原创 2019-07-25 16:54:24 · 787 阅读 · 1 评论 -
libevent源码学习(6):事件处理基础——event_base的创建
目录前言创建默认的event_baseevent_base的配置event_config结构体创建自定义event_base——event_base_new_with_config禁用(避免使用)某一种IO复用模型设置IO复用模型需要满足的特征设置event_base的flag特性获取event_base所满足的特征获取当前系统所支持的IO复用模型总结...原创 2019-07-01 15:53:18 · 1168 阅读 · 2 评论 -
libevent源码学习(5):TAILQ_QUEUE解析
目录前言结点定义链表初始化链表查询及遍历链表查询链表遍历插入结点头插法尾插法前插法后插法删除结点替换结点总结前言 在libevent中使用到了TAILQ数据结构,看了一下其他资料,发现TAILQ这一数据结构不仅仅用于libevent中,在很多其他地方像linux内核中也有使用。它的内部实际上就是一个双向链表,可以实现结点...原创 2019-06-19 21:11:02 · 960 阅读 · 2 评论 -
libevent源码学习(4):线程锁、条件变量(二)(调试锁)
目录EVUTIL_ASSERT宏开启调试锁调试锁结构调试锁函数debug_lock_allocdebug_lock_freedebug_lock_lock加锁检测debug_lock_unlock解锁检测调试锁下的条件变量函数总结以下源码均基于libevent-2.0.21-stable。 在上一章中,分析了线程锁函数以及条件变...原创 2019-05-23 13:41:56 · 447 阅读 · 0 评论 -
libevent源码学习(3):线程锁、条件变量(一)(锁函数、条件变量函数设置)
目录锁与条件变量函数结构体锁函数结构体设置自定义的锁函数条件变量函数结构体设置自定义的条件变量函数使用posix线程函数默认的锁函数evthread_posix_lock_allocevthread_posix_lock_freeevthread_posix_lockevthread_posix_unlock默认的条件变量函数evthread_p...原创 2019-05-23 13:41:47 · 827 阅读 · 0 评论 -
libevent源码学习(2):内存管理
目录内存管理函数函数声明event-config.h函数定义event_mm_malloc_event_mm_calloc_event_mm_strdup_event_mm_realloc_event_mm_free_event_set_mem_functions设置自定义内存管理函数内存管理流程以下源码均基于libevent-2.0.21-stab...原创 2019-04-14 09:52:34 · 954 阅读 · 0 评论 -
libevent源码学习(1):日志及错误处理
目录错误处理函数函数声明__attribute__指令函数定义可变参数宏_warn_helper函数日志处理event_log日志处理入口日志处理回调函数指针log_fn设置日志处理回调函数event_set_log_callback错误处理event_exit错误处理入口错误处理回调函数指针fatal_fn设置错误处理回调函数event_s...原创 2019-04-11 19:39:38 · 1657 阅读 · 0 评论 -
libevent源码学习(0):libevent库安装与简单使用
目录1.下载并解压libevent库2.安装libevent库3.简单使用libevent库1.下载并解压libevent库这里下载的是libevent 2.0.21 stable版本的,使用wget命令如下所示:(下载地址可通过http://libevent.org/对应的libevent版本右键复制链接获取) wget https://github.com/downl...原创 2019-04-09 20:48:19 · 1544 阅读 · 0 评论