libev所实现的功能就是一个强大的reactor,可能notify事件主要包括下面这些:
ev_io // IO可读可写
ev_stat // 文件属性变化
ev_async // 激活线程
ev_signal // 信号处理
ev_timer // 定时器
ev_periodic // 周期任务
ev_child // 子进程状态变化
ev_fork // 开辟进程
ev_cleanup // event loop退出触发事件
ev_idle // 每次event loop空闲触发事件
ev_embed // TODO(zhangyan04):I have no idea.
ev_prepare // 每次event loop之前事件
ev_check // 每次event loop之后事件
接收事件的类型:
EV_READ
EV_WRITE
ev_io 观察者中的文件描述符已经变得可读和/或可写。
EV_TIMER
ev_timer 观察者已经超时。
EV_PERIODIC
ev_periodic 观察者已经超时。
EV_SIGNAL
ev_signal 观察者中指定的信号已经由一个线程接收到。
EV_CHILD
ev_child 观察者中指定的 pid 已经接收到一个状态改变。
EV_STAT
ev_stat 观察者中指定的路径以某种方式改变了其属性。
EV_IDLE
ev_idle 观察者已经决定,你没有其它更好的事情要做
EV_PREPARE
EV_CHECK
所有的 ev_prepare 观察者仅在 ev_run 开始收集新事件 之前 调用,而所有的 ev_check 观察者仅在 ev_run 已经收集到了它们之后,但在任何接收到的事件的回调入队之前,被加入队列(而不是调用)。这意味着 ev_prepare 观察者是在事件循环休眠或为新事件而 poll 之前最后被调用的观察者,而 ev_check 观察者将在一个事件循环迭代内任何其它相同或更低优先级的观察者之前被调用。
这两种观察者类型的回调可以启动或停止任何数量它们想要的观察者,所有这些都将被考虑在内(比如,ev_prepare 观察者可能启动一个 idle 观察者来保持
ev_run 不被阻塞)。
EV_EMBED
ev_embed 观察者中指定的嵌入式事件循环需要注意。
EV_FORK
子线程中 fork 之后事件循环已经恢复(参考 ev_fork)。
EV_CLEANUP
事件循环将被销毁(参考 ev_cleanup)。
EV_ASYNC
给定的 async 观察者已经被异步地通知了(参考 ev_async)。
EV_CUSTOM
不是 libev 自身发送(或另外使用)的事件,但可以被 libev 的用户自由地用来通知观察者(比如,通过 ev_feed_event)。
EV_ERROR
发生未指定的错误,观察者已被停止。这可能发生在由于 libev 内存不足而观察者无法正常启动,发现一个文件描述符已经关闭,或其它问题。Libev 认为这些是应用程序的错误。