为什么epoll_wait只提供超长的1ms超时?

Mat*_*att 3 epoll

epoll_wait,select和poll函数都提供超时.然而对于epoll,它的分辨率为1ms.Select&ppoll是唯一提供亚毫秒超时的选项.

这意味着最好以1毫秒的间隔做其他事情.在现代CPU上,我可以在1ms内做很多其他事情.

所以要经常做1ms以上的其他事情我实际上必须提供零超时(基本上禁用它).而且我可能会在主循环中的某处添加我自己的睡眠以阻止它咀嚼过多的CPU.

所以问题是,当我认为有更高分辨率超时的情况时,为什么以毫秒为单位的超时.

Tom*_*jic 11

由于您使用的是Linux,因此您可以简单地使用timerfd API ,而不是提供零超时值并在循环体中手动操作.这实际上允许您创建与文件描述符关联的计时器(分辨率小于1ms),您可以将其添加到受监视的描述符集.

  • 刚刚从你的答案中了解了timerfd.太好了! (2认同)