Libevent剖析(一):建立对Libevent的宏观认知如何运作等

一)Libevent是什么:

我们应该都已经了解过linux服务器程序必须处理的三类事件:I/O事件,信号事件,定时事件。
而如何去编写程序统一处理这三类事件,同时保证可以移植到其他操作系统(因为不同的操作系统可能会具有不
同的I/O复用的方式,比如Solaris的dev/poll,linux的epoll,FreeBSD的Kqueue等),并支持并发编程,如何去
协同等等,如果每个服务器程序都要程序猿去编写处理这些时间的代码,会浪费大量时间不说,并不能保证程序的
安全,健壮。
       Libevent应用而生,高性能的I/O框架库,它解决了上述问题,即提供可以处理三类事件,并保证可移植并发的函数库,
以后我们只需学会使用此类框架库即可,省去了大量时间,又安全可靠。
       但我们还是要去学习他,明白它内部是如何运作,采用了什么机制,才能学以致用,更好的使用它们。
       
       libevent有好多版本,libevent1.4代码量比较少,结构比较简单,也适合入门学习,1.4很早以前看过了,大家想学习也可以学习1.4。
还有比较新的libevent2.0以上版本,代码量比1.4高很多,也加了很多功能。
       libevent下载:http://libevent.org/(安装不赘述,网上有大把说明)
       

二)libevent的基本运作方式(基本的运作框架):  

Reactor模式(各种I/O框架库会使用不同的模式去实现整体框架的运行,reactor是其中一种模式,或者是Proactor),他是框架库的核心,提供了如下几个主要方法:
handle_event它轮询等待然后去调用处理所发生事件的事件处理器;                register_handler,它去调用事件多路分发器的register_event方法来往事件多路分发器中注册一个事件(交给时间多路分发器的接口);
remove_handler。它去调用事件多路分发器的remove_event方法来删除事件多路分发器中一个事件; 
       Reactor模式的基本流程如下:应用程序需要提供相应的接口并且注册到reactor反应器上,如果相应的事件发生的话,那么reactor将自动调用相应的注册的接口函数(类似于回调函数)通知你。
       在Reactor模式的I/O框架库主要有以下组件:句柄:比如I/O事件中的文件描述符,不管哪一类事件,当内核检测到时间发生,将通过句柄来通知应用程序事件发生。(信号事件对应的就是信号值)
                                                                     事件多路分发器:框架库会将各种I/O复用方式的调用封装成一个统一接口,即叫做事件多路分发器,由它对添加来的事件进行分发给不同的处理系统;(同时它还包括向事件多路分发器中添加删除事件的接口函数操作)
                                                                     事件处理器:即执行事件对应的业务逻辑,就是当事件发生如何去处理,当然它会包含有一个或多个hand_event回调函数;
这副图片是对Reactor模式下的一个工作时序图,可以看出我们事件注册分发处理的流程


三)绪论:

     上述对libevent的解析我们会对它的用法大致框架流程有一个了解,这是所有初学者最想去了解的,也会方便对以后学习有好多方向认识;
      libevent还含有许多的东西,比如它的数据结构,如何去组织事件循环,事件处理的具体方式,如何封装事件处理器的数据等等,我会继续发博 客讨论分享。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值