(PECL event >= 1.2.6-beta)
EventBase 类表示 libevent 的事件基础结构。它包含一组事件,并且可以轮询以确定哪些事件处于活动状态。
每个事件基础都有一个 方法 或一个 后端,它用于确定哪些事件已准备就绪。识别的方法包括: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 的内部更改列表代码来批量添加和删除,以便尝试尽可能少地进行系统调用。
设置此标志可以使代码运行得更快,但它可能会触发 Linux 错误:如果任何 fd 通过 dup() 或其变体克隆,则使用此标志是不安全的。这样做会导致奇怪且难以诊断的错误。
此标志也可以通过设置 EVENT_EPOLL_USE_CHANGELIST
环境变量来激活。
如果最终使用除 epoll
之外的后端,则此标志无效。