【发布时间】:2011-01-15 17:06:24
【问题描述】:
当前场景是 epoll_wait 在几个 fds 和一个可能的传入消息队列上,我希望 epoll_wait 下面的循环在 IO 事件或新消息上执行。
我知道的方式:
- 使用
time毫秒超时并在循环中首先检查队列 - 当消息可用时使用队列代码中的self-pipe trick
- 使用标准信号中断系统调用
- 使用 epoll_pwait 并细化上一点
上面发布的任何一点都不足以让我满意,我想知道是否还有其他我没有找到的方法。
原因是:
- 信号在多线程代码中是要避免的,而且不是很可靠
- 超时一删除了 epoll 的部分好处,只在事件中唤醒
- self-pipe 技巧看起来是目前最好的方法,但仍然有太多样板
想法?
【问题讨论】:
标签: linux networking asynchronous io