使用非IO事件中断epoll_wait,无信号
当前方案是通过几个fds和可能的传入消息队列进行epoll_wait,我希望epoll_wait下面的循环在IO事件或新消息上执行。
我知道的方式:
- 使用
time
毫秒超时,并在循环中首先检查队列 - 当消息可用时,使用队列代码中的自动管道技巧
- 用标准信号中断系统调用
- 使用epoll_pwait并优化上一点
上面发布的所有要点都不足以让我满意,我想知道是否还有其他未找到的方法。
原因如下:
- 信号是多线程代码上应避免的事情,并且不是很可靠
- 超时一消除了epoll的部分好处,仅在发生事件时醒来
- 目前,自管技巧似乎是最好的方法,但样板仍然太多
想法?
回答:
您可以使用eventfd,它实际上与self-
pipe技巧一样,只是文件描述符更少,样板更少(例如glibc具有便捷eventfd_read/write
功能)。
以上是 使用非IO事件中断epoll_wait,无信号 的全部内容, 来源链接: utcz.com/qa/415946.html