摘要:
用一个调用链来表示函数调用的流程,看起来更直观。根据上面的分析,总结了一些重要的调用链。初始化event_base_newevent_base_new_with_configmin_heap_ctorevent_deferred_cb_queue_initevmap_io_initmapevmap_... 阅读全文
摘要:
Dispatch类似于一个消息泵,在一个死循环中,不停地检查IO的状态(可以想像成不断从消息队列中读取消息),将状态的改变变成事件,再进行事件的响应。主要代码如下:[event.c]intevent_base_loop(structevent_base*base,intflags){conststr... 阅读全文
摘要:
libevent2对信号的响应也进行了封装,使之与socket操作一样对外提供统一的接口。这里的信号一般指linux的信号。由于信号与socket相关的编程接口有较大的不同,因此在内部实现也有一些区别。与IO操作(socket算作是IO操作)的evsel类似,在event_base中也定义了信号的操... 阅读全文
摘要:
本文并不很详细地分析初始化的各个细节,而重点分析如何将底层操作关联到event_base的相关字段。初始化工作主要是针对event_base的。libevent2支持多种底层实现,有epoll, select, iocp等。下面的工作主要是以熟悉的select作为底层实现,分析libevent2的工... 阅读全文
摘要:
event的本质libevent2中的event的本质是什么?只要是非同步阻塞的运行方式,肯定遵循事件的订阅-发布模型。通过event_new的函数原型可以理解,一个event即代表一次订阅,建立起了fd变化的事件与callback响应函数之间的一个关联。订阅-发布模型有四个方面,事件定义、事件订阅... 阅读全文