libevent源码分析(4)--2.1.8--结构体struct event_config

来源:互联网 发布:c语言for循环打印图形 编辑:程序博客网 时间:2024/06/01 07:28

一、event_entry结构体

struct event_config_entry {     // 下一个屏蔽的后台方法名    TAILQ_ENTRY(event_config_entry) next;     // 屏蔽的后台方法名    const char *avoid_method;};



二、event_config结构体

** Internal structure: describes the configuration we want for an event_base * that we're about to allocate. */// 内部结构体,用于描述对event_base进行配置的配置信息struct event_config {     // 屏蔽的后台方法列表    TAILQ_HEAD(event_configq, event_config_entry) entries;     // cpu个数,这个仅仅是对event_base的建议,不是强制的    int n_cpus_hint;     // 如果不执行以下检查,默认情况下,event_base会按照当前优先级队列的顺序,一直将本优先级     // 队列的事件执行完毕之后才会检查新事件,这样的好处是吞吐量大,但是在低优先级队列比较长时,     // 会导致某些高优先级一直在等待执行,无法抢占cpu    // event_base在event_loop中两次检查新事件之间执行回调函数的时间间隔    // 需要每次执行完回调函数之后都进行检查    struct timeval max_dispatch_interval;     // event_base在event_loop中两次检查新事件之间执行调度回调函数的最大个数     // 需要每次执行完回调函数之后都进行检查    int max_dispatch_callbacks;     // 用于启动上面两个检查的开关,如果=0,则每次执行完毕回调函数之后都强制进行检查;     // 如果=n,则只有在执行完毕>=n的优先级事件之后才会强制执行上述检查    int limit_callbacks_after_prio;     // event_base后台方法需要的特征     // enum event_method_feature {     // 边沿触发     // EV_FEATURE_ET = 0x01,     // 要求事后台方法在调度很多事件时大约为O(1)操作,select和poll无法提供这种特征,     // 这两种方法具有N个事件时,可以提供O(N)操作    // EV_FEATURE_O1 = 0x02,     // 后台方法可以处理各种文件描述符,而不仅仅是sockets    // EV_FEATURE_FDS = 0x04,    /** Require an event method that allows you to use EV_CLOSED to detect     * connection close without the necessity of reading all the pending data.     *     * Methods that do support EV_CLOSED may not be able to provide support on     * all kernel versions.     **/     // 要求后台方法允许使用EV_CLOSED特征检测链接是否中断,而不需要读取     // 所有未决数据;但是不是所有内核都能提供这种特征    // EV_FEATURE_EARLY_CLOSE = 0x08    // };    enum event_method_feature require_features;     // event_base配置的特征值     // 多线程调用是不安全的,单线程非阻塞模式    // EVENT_BASE_FLAG_NOLOCK = 0x01,     // 忽略检查EVENT_*等环境变量    // EVENT_BASE_FLAG_IGNORE_ENV = 0x02,     // 只用于windows    // EVENT_BASE_FLAG_STARTUP_IOCP = 0x04,     // 不使用缓存的时间,每次回调都会获取系统时间    // EVENT_BASE_FLAG_NO_CACHE_TIME = 0x08,     // 如果使用epoll方法,则使用epoll内部的changelist    // EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST = 0x10,     // 使用更精确的时间,但是可能性能会降低    // EVENT_BASE_FLAG_PRECISE_TIMER = 0x20    enum event_base_config_flag flags;};



阅读全文
0 0
原创粉丝点击