小编典典

使用非IO事件中断epoll_wait,无信号

linux

当前方案是通过几个fds和可能的传入消息队列进行epoll_wait,我希望epoll_wait下面的循环在IO事件或新消息上执行。
我知道的方式:

  • 使用time毫秒超时,并在循环中首先检查队列
  • 当消息可用时,使用队列代码中的自动管道技巧
  • 用标准信号中断系统调用
  • 使用epoll_pwait并优化上一点

上面发布的所有要点都不足以让我满意,我想知道是否还有其他未找到的方法。
原因如下:

  • 信号是多线程代码上应避免的事情,并且不是很可靠
  • 超时一消除了epoll的部分好处,仅在发生事件时醒来
  • 目前,自管技巧似乎是最好的方法,但样板仍然太多

想法?


阅读 541

收藏
2020-06-07

共1个答案

小编典典

您可以使用eventfd,它实际上与self-
pipe技巧一样,只是文件描述符更少,样板更少(例如glibc具有便捷eventfd_read/write功能)。

2020-06-07