(PECL event >= 1.2.6-beta)
EventBase 类表示 libevent 的事件基础结构。它包含一组事件,可以轮询以确定哪些事件处于活动状态。
每个事件基础都有一个 *方法* 或一个 *后端*,它用来确定哪些事件已准备就绪。已知的 method 是:select
、poll
、epoll
、kqueue
、devpoll
、evport
和 win32
。
要配置事件基础以使用或避免特定后端,可以使用 EventConfig 类。
只要相关 Event
对象的资源未释放,就 *不要* 销毁 EventBase 对象。否则,会导致不可预测的结果!
EventBase::LOOP_ONCE
与 EventBase::loop() 方法一起使用的标志,表示:“阻塞,直到 libevent 有一个活动事件,然后在所有活动事件的回调运行后退出”。
EventBase::LOOP_NONBLOCK
与 EventBase::loop() 方法一起使用的标志,表示:“不要阻塞:查看当前哪些事件已准备就绪,运行优先级最高的回调,然后退出”。
EventBase::NOLOCK
配置标志。即使我们设置了锁定,也不为事件基础分配锁定。
EventBase::STARTUP_IOCP
仅限 Windows 的配置标志。在启动时启用 IOCP 调度程序。
EventBase::NO_CACHE_TIME
配置标志。不要在每次事件循环准备运行超时回调时检查当前时间,而是在每个超时回调后检查。
EventBase::EPOLL_USE_CHANGELIST
如果我们使用的是 epoll
后端,此标志表示可以安全地使用 Libevent 的内部 change-list 代码来批处理添加和删除操作,以便尝试尽可能减少系统调用次数。
设置此标志可以使代码运行更快,但它可能会触发 Linux 错误:如果存在任何通过 dup() 或其变体克隆的 fds,则使用此标志是不安全的。这样做会导致奇怪且难以诊断的错误。
此标志也可以通过设置 EVENT_EPOLL_USE_CHANGELIST
环境变量来激活。
如果最终使用的后端不是 epoll
,则此标志无效。