我正在学习 libev,我偶然发现了这个问题。假设我想尽快处理某事但不是现在(即不在当前执行的函数中)。例如,我想将一些大型同步作业分成多个将排队的部分,以便其他回调可以在其间触发。换句话说,我想用 timeout 安排回调0
。
所以第一个想法是ev_timer
与 timeout一起使用0
。第一个问题是:效率高吗?libev 是否能够将0
超时计时器转换为高效的“尽快调用”工作?我认为不是。
我一直在研究libev 的文档,还发现了其他选项:
它可以通过使用准备或空闲观察者人为地延迟调用回调
所以空闲的观察者在这里可能不会很好,因为
当没有其他相同或更高优先级的事件挂起时,空闲观察者会触发事件
这可能不是我想要的。准备观察者可能在这里工作。但是为什么不检查观察者呢?我所说的上下文有什么根本区别吗?
这些文档建议的另一个选项是:
或者更偷偷摸摸地,通过重用现有的(停止的)观察者并将其推入待处理队列:
ev_set_cb (watcher, callback);
ev_feed_event (EV_A_ watcher, 0);
但这需要始终有一个停止的观察者。此外,由于我事先不知道我想同时安排多少个电话,所以我必须有多个观察者,并另外通过某种列表跟踪它们,并在需要时增加它。
那么我在正确的轨道上吗?这些都是可能性还是我错过了一些简单的东西?