Event in Action(0).event_base
很多营销号一上来就介绍历史,让人兴趣全无。。

留一些坑(目前本人源码还没看多少,也基本没用过。所以以后再说):
1、event_base的线程安全
2、EVENT_BASE_FLAG_NO_CACHE_TIME中提到的timeout callbacks具体指什么
3、

先来看第一个api:
返回一个event base结构体。linux上默认采用epoll。
如果想要更细的设置,那么需要以下三个api:
event config可以通过这个api:
让event base具有以下特点:
1、EV_FEATURE_ET——edge trigger触发事件
2、EV_FEATURE_FDS——监听不同的描述符(不只是socket)
3、EV_FEATURE_O1——O(1)方法
select和poll满足2;epoll满足1、3。require2的时候邮箱选择poll。当poll被avoid:
event_config_avoid_method(cfg,"poll")的时候,会选择select。其他时候都是epoll。
有以下flags:
1、EVENT_BASE_FLAG_NOLOCK——放弃给这个base申请一个lock,不再保证线程安全。框架源码的行为是,if(base->lock!=null)lock(base->lock); ,设置这个flag会让base->lock为null。
2、EVENT_BASE_FLAG_IGNORE_ENV——初始化时不再检测运行环境。这个感觉用处不大。
3、EVENT_BASE_FLAG_STARTUP_IOCP——windows著名的iocp。直接忽略,普通人只学linux
4、EVENT_BASE_FLAG_NO_CACHE_TIME——设置后,不在run timoutcallback前检查时间,改为run完callback再检查时间。可能消耗更多cpu。
5、EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST——使用比epoll更牛逼的后端。目测是新技术,不急,等成熟了再学
6、EVENT_BASE_FLAG_PRECISE_TIMER——使用效率更低但更精确的timer