事件库之Libev(五)

##其他监控器 最主要的几个监控器搞定了。其他的我觉得比较可以看的还有ev_child和ev_stat。其实和之前的三个基本原理的是一样。暂不赘述。未来可能补充。

##Libev中的Tips 如果将Libev当成组件去用的话。官方文档是一份很好的选择。这里说下看Libev过程中的感受。

如果使用Libev但又觉得它没有提供必要的功能而要去该其代码。可能Libuv为我们做了一个很好的示例。Libuv之前是用Libev作为其底层事件库。后来作者重写了自己的一套网络库Libuv。严格意义上说,Libev仅仅是一个事件模型框架,并不能算上是一个完整的网络库,正因为如此他才提供了如此多的事件类型。而对于网络库可能最重要的就是定时器、IO、以及信号事件。当然网络还包括了socket、收发控制等内容。因此,我的感觉是可以将Libev当成一个很好的学习对象,不论是其设计思想、还是代码中个各种小tips、还有其对跨平台支持的方法都是很好的示例。虽然用宏包裹的比较严密,只要稍加分析,理清其思路还是比较容易的。

将Libev和之前的Redis-ae进行对比。可以发现Libev在设计思想上更完整,提供的服务也更全,但是做的检测多了,逻辑复杂了,消耗的资源也必定比简单的封装更多。从这个两个模型可以看出事件模型的框架都是:

取得一个合适的时间,用这个时间去poll。然后标记poll之后pending的文件对象。poll出来后判断定时器然后统一处理pending对象

这里绘制一个整体的结构图,不是很规范UML或者其他什么学术的图,只是一个帮助理解的过程:

整体结构图

至此Libev的分析差不多完成了,主要去了解实现的思路。具体如何实现以及从什么样的角度去设计。其结果需要在生产环境中去检验。

猜你喜欢

转载自blog.csdn.net/f110300641/article/details/83714145