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/

最新文章

  1. 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
  2. Oracle 游标使用全解(转)
  3. [Unity3D] 浅尝Unity3D
  4. ftp断点续传
  5. 邻接表实现Dijkstra算法以及DFS与BFS算法
  6. css+js 控制幻灯片效果
  7. Silverlight动画的基本知识、关键帧动画
  8. ubuntu装机
  9. 调整系统的inode数量
  10. #DP# ----- OpenJudge数字组合
  11. Flex表格中添加图片
  12. python-----运算符及while循环
  13. 【福大软工】 W班级总成绩排名3
  14. Flutter 卡在 package get 的解决办法
  15. synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)
  16. JS判断手机端是否安装某应用
  17. pandas的to_csv()使用方法
  18. Python 基本语法,文件读写,数据结构和类型
  19. linux 创建数据库
  20. DjangoDRF序列化组件使用

热门文章

  1. SITP & Raspberry Pi
  2. HDU - 6241 :Color a Tree(不错的二分)
  3. Java得到当前系统时间,精确到毫秒的几种方法
  4. Redis设计与实现 (一): 简单动态字符串
  5. iOS 10 隐私权限设置
  6. 从如何优化SQL入手,提高数据仓库的ETL效率
  7. 泛型List<T>排序(利用反射)
  8. FastAdmin + uni-app
  9. React组件传值方式总结
  10. 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)