当前的情况是epoll_wait在几个fds和一个可能的传入消息队列,我想epoll_wait下面的循环执行IO事件或新消息。
我知道的方法:
time
毫秒超时,并在循环中检查队列的第一件事 上面提到的要点都不足以满足我的要求,我想知道是否还有其他的方法,我没有find。
原因是:
想法?
除了使用更少的文件描述符和更少的样板文件(例如,glibc具有便利的eventfd_read/write
函数)之外,您可以使用与自我管道技巧实际上相同的事件。
你已经列举了可以唤醒epoll的事件,所以这个问题真的变成了:“我如何减少自我管道技巧的样板?
这个问题的答案真的取决于你的代码,语言和你正在做的事情。 我假设你有一个处理I / O的线程,并且当没有I / O准备好的时候,你想在那个线程中做其他工作。 在管理epoll循环的代码中,它可以有一个内部句柄作为“唤醒”函数或“提交工作”函数暴露给系统的其他部分。
有这样的库,例如C ++的boost.asio。 但是,如果您只是针对epoll,编写自己的代码并不困难,并且一旦您拥有了一个类/模块/任何与epoll循环相关的代码,实际的样板代码的数量应该是最小的。