Libevent(三)
每个event_base保存一堆event,而且可以测验出哪些events是激活了的
如果一个event_base是设置为用了锁,那么就是线程安全的。然而,如果你有很多个线程要进行IO操作,那么对于每个线程都需要创建一个event_base
每一个event_base都有一个工具,这些工具是:
** select poll epoll kqueue devpoll evport win32 **
你也可以关闭某个特定的工具,例如 kqueue,通过设置EVENT_NOKQUEUE环境变量关闭。如果想要在程序里关闭,可以用event_config_avoid_method
event_base_new()函数从堆分配一个默认event_base对象,返回一个event_base的指针,出错返回NULL
接口
event_config是一个保存特定event_base信息的结构体。如果要特定的event_base,将event_config传给函数event_base_new_with_config()
接口
用event_config_new()去分配一个新的event_config对象,通过调用其他函数去设置event_config,用event_config_free去回收对象。
接口
直接通过字符串名称调用event_config_avoid_method()可以让Libevent不去用特指的工具。通过event_config_require_feature()告诉Libevent不去使用不能提供特指一系列特点的工具。event_config_set_flag设置一些标签。
EV_FEATURE_ET:
需要工具支持边缘触发IO
EV_FEATURE_O1
需要工具支持插入删除激活event的复杂度是O(1)
EV_FEATURE_FDS
需要工具提供各种文件描述符,而不只是套接字。
EVENT_BASE_FLAG_NOLOCK
不给此event_base设置线程锁,多线程不安全。
示例:创建特定event_base
调用函数 void event_base_free(struct event_base* base);
默认情况下,一个event_base只支持一个优先级,可以设置多个优先级通过调用接口
优先级参数至少为1,设置后优先级为0到n_priorities-1。Libevent支持的最高优先级为EVENT_MAX_PRIORITIES.
要找到当前event_base支持多少优先级通过调用函数
在创建新进程后还要继续使用之前event_base的话,最好重新初始化
接口:
早期版本的Libevent库有个全局默认event_base,可以被所有线程访问 ,如果绑定在这个默认的event_base上,这是线程不安全的。替代event_base_new()的是:
这个将当前要绑定的base设为分配的base,而不是默认的base。