libevent是如何实现事件监听的呢?

在Linux,libevent的底层实现是epoll,因此实现事件监听的方式就是,把需要监听的fd加入epoll中。

I/O事件

libevent(六)事件监听
    





		
libevent(七)信号事件监听

定时器事件

定时器事件没有fd,那么如何监听呢?

这里先看下epoll_wait这个函数

int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);
// The timeout argument specifies the number of milliseconds that epoll_wait() will block.

libevent采用的方法是:每次运行epoll_wait时,选择最小堆堆顶事件的超时时间与当前时间的差值作为epoll_wait函数的timeout。

信号事件

信号事件也没有fd,那么如何监听呢?可参考

相关文章:

  • 2021-06-16
  • 2022-12-23
  • 2021-08-16
  • 2021-05-17
  • 2021-08-15
  • 2021-11-16
  • 2021-09-14
猜你喜欢
  • 2021-09-11
  • 2021-10-07
  • 2022-02-27
  • 2021-12-28
  • 2021-12-14
相关资源
相似解决方案