博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2014年4月21日

摘要: 用一个调用链来表示函数调用的流程,看起来更直观。根据上面的分析,总结了一些重要的调用链。初始化event_base_newevent_base_new_with_configmin_heap_ctorevent_deferred_cb_queue_initevmap_io_initmapevmap_... 阅读全文
posted @ 2014-04-21 23:15 黑米 阅读(567) 评论(0) 推荐(0) 编辑

摘要: Dispatch类似于一个消息泵,在一个死循环中,不停地检查IO的状态(可以想像成不断从消息队列中读取消息),将状态的改变变成事件,再进行事件的响应。主要代码如下:[event.c]intevent_base_loop(structevent_base*base,intflags){conststr... 阅读全文
posted @ 2014-04-21 23:11 黑米 阅读(1648) 评论(0) 推荐(0) 编辑

摘要: libevent2对信号的响应也进行了封装,使之与socket操作一样对外提供统一的接口。这里的信号一般指linux的信号。由于信号与socket相关的编程接口有较大的不同,因此在内部实现也有一些区别。与IO操作(socket算作是IO操作)的evsel类似,在event_base中也定义了信号的操... 阅读全文
posted @ 2014-04-21 23:00 黑米 阅读(1833) 评论(0) 推荐(0) 编辑

摘要: 本文并不很详细地分析初始化的各个细节,而重点分析如何将底层操作关联到event_base的相关字段。初始化工作主要是针对event_base的。libevent2支持多种底层实现,有epoll, select, iocp等。下面的工作主要是以熟悉的select作为底层实现,分析libevent2的工... 阅读全文
posted @ 2014-04-21 22:24 黑米 阅读(1504) 评论(0) 推荐(0) 编辑

摘要: event的本质libevent2中的event的本质是什么?只要是非同步阻塞的运行方式,肯定遵循事件的订阅-发布模型。通过event_new的函数原型可以理解,一个event即代表一次订阅,建立起了fd变化的事件与callback响应函数之间的一个关联。订阅-发布模型有四个方面,事件定义、事件订阅... 阅读全文
posted @ 2014-04-21 22:08 黑米 阅读(1307) 评论(0) 推荐(0) 编辑