使用linux timerfd在Dev poll reactor中实现超时

时间:2014-01-29 08:29:28

标签: c++ timer epoll ace reactor

只是想知道为linux使用timerfd(timerfd_create)是否会比Timer_Heap或Timer_Wheel提供任何性能优势。 当然,这是一个非常高级别的问题,我看到它在任何框架中使用的唯一地方是“muduo”。此外,我也没有任何性能比较。

感谢。

1 个答案:

答案 0 :(得分:2)

像libevent这样的事件循环库,在最小堆中维护定时器并将超时传递到下一个定时器到期select / epoll。请注意,在此方案中添加和删除计时器不涉及任何系统调用,它只是将新元素添加到最小堆中。

使用timerfd时,只需创建一个计时器即可进行3次系统调用(timerfd_create()timerfd_settime()epoll_ctl())。每次到期时,您需要从该文件描述符read()

timerfd对于没有事件循环的应用程序可能很有用,但是对于那些已经使用了不错的事件循环的应用程序来说,它几乎没用。