原文地址:http://blog.csdn.net/sparkliang/article/details/4957667

libevent源码深度剖析一

——序幕
张亮

1 前言

Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于,一则分享心得;二则对libevent代码和设计思想做系统的、更深层次的分析,写出来,也可供后来者参考。

附带一句:Libevent是用c语言编写的(MS大牛们都偏爱c语言哪),而且几乎是无处不函数指针,学习其源代码也需要相当的c语言基础。

2 Libevent简介

上来当然要先夸奖啦,Libevent 有几个显著的亮点:
事件驱动(event-driven),高性能;
轻量级,专注于网络,不如ACE那么臃肿庞大;
源代码相当精炼、易读;
跨平台,支持Windows、Linux、*BSD和Mac Os;
支持多种I/O多路复用技术, epoll、poll、dev/poll、select和kqueue等;
支持I/O,定时器和信号等事件;
注册事件优先级;

Libevent已经被广泛的应用,作为底层的网络库;比如memcached、Vomit、Nylon、Netchat等等。
Libevent当前的最新稳定版是1.4.13;这也是本文参照的版本。

3 学习的好处

学习libevent有助于提升程序设计功力,除了网络程序设计方面外,Libevent的代码里有很多有用的设计技巧和基础数据结构,比如信息隐藏、函数指针、c语言的多态支持、链表和堆等等,都有助于提升自身的程序功力。
程序设计不止要了解框架,很多细节之处恰恰也是事关整个系统成败的关键。只对libevent本身的框架大概了解,那或许仅仅是一知半解,不深入代码分析,就难以了解其设计的精巧之处,也就难以为自己所用。

事实上Libevent本身就是一个典型的Reactor模型,理解Reactor模式是理解libevent的基石;因此下一节将介绍典型的事件驱动设计模式——Reactor模式。

参考资料:
Libevent: http://monkey.org/~provos/libevent/

libevent源码深度剖析相关推荐

  1. libevent源码深度剖析十一

    libevent源码深度剖析十一 --时间管理 张亮 为了支持定时器,Libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数.时间缓存.时间校正和定时器堆的时间值 ...

  2. libevent源码深度剖析八

    libevent源码深度剖析八 --集成信号处理 张亮 现在我们已经了解了libevent的基本框架:事件管理框架和事件主循环.上节提到了libevent中I/O事件和Signal以及Timer事件的 ...

  3. libevent源码深度剖析十

    libevent源码深度剖析十 --支持I/O多路复用技术 张亮 Libevent的核心是事件驱动.同步非阻塞,为了达到这一目标,必须采用系统提供的I/O多路复用技术,而这些在Windows.Linu ...

  4. libevent源码深度剖析一

    libevent源码深度剖析一 --序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少.写这一系列文章的用意在于,一则分享心得:二则对libe ...

  5. libevent 源码深度剖析十三

    libevent 源码深度剖析十三 -- libevent 信号处理注意点 前面讲到了 libevent 实现多线程的方法,然而在多线程的环境中注册信号事件,还是有一些情况需要小心处理,那就是不能在多 ...

  6. libevent源码深度剖析十二

    libevent源码深度剖析十二 --让libevent支持多线程 张亮 Libevent本身不是多线程安全的,在多核的时代,如何能充分利用CPU的能力呢,这一节来说说如何在多线程环境中使用libev ...

  7. libevent源码深度剖析九

    libevent源码深度剖析九 --集成定时器事件 张亮 现在再来详细分析libevent中I/O事件和Timer事件的集成,与Signal相比,Timer事件的集成会直观和简单很多.Libevent ...

  8. libevent源码深度剖析六

    libevent源码深度剖析六 --初见事件处理框架 张亮 前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析libe ...

  9. libevent源码深度剖析五

    libevent源码深度剖析五 --libevent的核心:事件event张亮 对事件处理流程有了高层的认识后,本节将详细介绍libevent的核心结构event,以及libevent对event的管 ...

最新文章

  1. Android异步机制一:使用Thread+Handler实现非UI线程更新UI界面
  2. IntelliJ IDEA绑定Github报Error 403: Not Authorized没有授权问题解决方法
  3. SqlHelper详解(转载)
  4. arcgis加载天地图_ArcGIS Runtime SDK for Android100.5.0端加载天地图服务
  5. OpenResty学习地图来啦,速速收藏!
  6. vue 按A-Z字母排序数据
  7. SVD 与 PCA 的直观解释(3): SVD的直观解释及推导
  8. 百度编辑器UEditor修改成支持物理路径
  9. 智能优化算法:猫群优化算法-附代码
  10. Python语法基础
  11. 轻量级jQuery带底栏轮播(焦点图)插件slideBox
  12. ARM嵌入式的位绑定原理
  13. python 使用正则表达式爬取淘宝店铺图片
  14. 什么是进程,进程与程序的主要区别是什么?
  15. 虚拟机网络适配器下的3种网络模式(主机模式、桥接模式和NAT模式)
  16. 背锅侠?程序出现bug是测试/开发工程师水平有限导致的?我只是个搬砖的......
  17. ZooKeeper之服务器地址列表。
  18. Google Play渠道超过100M?尝试APK分包,面试资料分享
  19. 鱼眼镜头opencv2校正
  20. 计算机网络机房建设过程中单独设置接地体时,必备的IDC机房建设流程解析明细!...

热门文章

  1. php5.3.28安装,安装php-5.3.28 时问题
  2. php支付宝同步和异步有什么区别,支付宝异步验签和同步验签
  3. SICK LMS151-10100使用攻略
  4. RS485通信如何设计EMC电路?
  5. 力扣(LeetCode)刷题,简单+中等题(第31期)
  6. 【Python】函数图像绘制:二维图像、三维图像、散点图、心形图
  7. java aio_java中的AIO
  8. 动机模型_一个模型教你如何激发学习动机
  9. python删除csv某一行_Python如何修改CSV的某一行/列的值
  10. Tensorflow C++ API调用Keras模型实现RGB图像语义分割