
libevent源码分析
文章平均质量分 89
huangjh2018
这个作者很懒,什么都没留下…
展开
-
Libevent-2.1.8源码分析——锁和线程
1. 概述libevent作为一个开源的高性能的事件通知库。经常被用作于多线程网络程序的开发。说到多线程我们想到的当然是线程安全。庆幸的是libevent是支持多线程的(默认情况下是不开启多线程的)。当我们调用 int evthread_use_windows_threads(void) 、int evthread_use_pthreads(void)或int evthread_set_con原创 2017-08-23 21:29:55 · 2119 阅读 · 0 评论 -
Libevent-2.1.8源码分析——内存管理
1. 概述默认情况下,libevent使用C库的内存管理函数在堆上分配内存(其实也就是我们在C中经常使用的malloc、realloc和free)。当然如果对于内存的管理有极高的要求,例如在我们的应用程序中可能频繁的申请和释放libevent相关的对象,如果采用默认的内存管理,那么可能就会产生大量的内存碎片造成效率下降,如果对于我们的网络应用程序来说这种效率的下降是不可接受的,那么我们就需要自原创 2017-08-16 21:22:34 · 1431 阅读 · 0 评论 -
Libevent-2.1.8源码分析——日志消息
与许多开源库类似,libevent也提供了日志的支持。libevent提供的日志支持可以记录内部的错误和警告,并且这些日志仅libevent内部使用的,应用程序无法使用。值得一提的是,libevent提供的日志支持相对简单。默认配置下这些消息被写向标志错误输出(stderr),当然也提供定制日志函数覆盖默认的行为。对于在应用程序中想使用日志库的话,推荐glog、log4cplus、log4cpp、log4cxx等开源的日志库。原创 2017-08-15 22:22:01 · 1495 阅读 · 0 评论 -
Libevent-2.1.8源码分析——最小堆
1. 堆的概述堆不仅用在堆排序中,而且它也可以构造一种有效的优先队列。(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个节点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左向右填充。表示堆的数组A包括两个属性:A.length(通常)给出数组元素的个数,A.heap-size表示有多少个堆元素存储在该数组中。也就是说,虽然A[1..A.length]可能都原创 2017-09-13 21:02:18 · 1331 阅读 · 0 评论 -
Libevent-2.1.8源码分析——event_base(一)
1. 简介在使用libevent函数之前需要分配一个或者多个event_base结构体。每个event_base结构体持有一个事件集合,可以检查以确认哪个事件是激活的。如果设置event_base使用锁,则可以安全的在多个线程中访问它。然而,其事件循环只能运行在一个线程中(Reactor模型)。如果需要多个线程检查IO,则需要为每个线程使用一个event_base。每个event_base原创 2017-09-20 20:47:42 · 1104 阅读 · 0 评论 -
Libevent-2.1.8源码分析——event_base(二)
上一节中,我们学习了如何创建一个默认的event_base。但是在实际的应用中,默认的event_base是远远满足不了需求的。更多的时候我们是需要根据具体的使用情况,来建立一个复杂的event_base。关于如何建立复杂的event_base,其实在上一篇章中,我们已经提及。接下来我们将更深入的了解如何建立一个复杂的event_base。原创 2017-09-20 21:47:36 · 1057 阅读 · 3 评论