首页 > 代码库 > 一起读读libevent的源代码:Libevent 第二章 创建Event base (1)
一起读读libevent的源代码:Libevent 第二章 创建Event base (1)
在您可以使用任何有趣的libevent函数,需要分配一个或多个event_base结构。每个event_base结构持有一组事件,可以poll决定哪些事件是激活的。
如果一个event_base设置使用lock,可以访问多个线程之间。然而,它的循环只能在单个线程中运行。如果你想有多个线程轮询IO,你需要为每个线程一个event_base。
支持一下的方法来进行决定哪个是激活的:
-
select
-
poll
-
epoll
-
kqueue
-
devpoll
-
evport
-
win32
用户可以禁用特定的后端(上面的方法就称为backend)与环境变量。如果你想关闭kqueue后端,设置event_nokqueue环境变量( EVENT_NOEPOLL, EVENT_NOKQUEUE, EVENT_NODEVPOLL, EVENT_NOPOLL or EVENT_NOSELECT, ),等等.
EVENT_SHOW_METHOD 可以显示有哪些 kernel notification method 。
如果你想在程序里面关闭某个后端, 可以查看这个函数:event_config_avoid_method
1137 int 1138 event_config_avoid_method(struct event_config *cfg, const char *method) 1139 { 1140 struct event_config_entry *entry = mm_malloc(sizeof(*entry)); 1141 if (entry == NULL) 1142 return (-1); 1143 1144 if ((entry->avoid_method = mm_strdup(method)) == NULL) { 1145 mm_free(entry); 1146 return (-1); 1147 } 1148 1149 TAILQ_INSERT_TAIL(&cfg->entries, entry, next); 1150 1151 return (0); 1152 }
这个函数,就是要把这个避免配置 struct event_config_entry 插入 struct event_config 的队列里面:查看下这两个结构体的定义,大概猜想就是创建一个event_base的时候,会使用这些配置文件,所以只要设置如就可以避免使用这些后段方法吧?
0357 /** Internal structure: describes the configuration we want for an event_base 0358 * that we‘re about to allocate. */ 0359 struct event_config { 0360 TAILQ_HEAD(event_configq, event_config_entry) entries; 0361 0362 int n_cpus_hint; 0363 struct timeval max_dispatch_interval; 0364 int max_dispatch_callbacks; 0365 int limit_callbacks_after_prio; 0366 enum event_method_feature require_features; 0367 enum event_base_config_flag flags; 0368 }; 0351 struct event_config_entry { 0352 TAILQ_ENTRY(event_config_entry) next; 0353 0354 const char *avoid_method; 0355 };
Setting up a default event_base
接口:
Interface struct event_base *event_base_new(void);
函数的
一起读读libevent的源代码:Libevent 第二章 创建Event base (1)