gpt4 book ai didi

linux - epoll 为 timerfd 报告 EPOLLIN 后,read() 返回 EAGAIN

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:47 37 4
gpt4 key购买 nike

我使用带有 TFD_NONBLOCK 选项的 timerfd。

这个计时器被添加到只有 EPOLLIN 事件集的 epoll Controller 。如果 EPOLLIN 发生,则在此计时器上使用 read()

在 99% 的情况下一切正常。执行在 epoll_wait 停止,然后在定时器间隔后继续。然而,在繁重的系统负载下,我收到了几次来自 read()EAGAIN

这看起来像我收到了 EPOLLIN 但没有任何内容可供阅读。

最佳答案

可能找到了答案。

在我的程序中,我同时使用了几个计时器,其中一些正在修改其他计时器的间隔。在负载很少或没有负载的情况下,epoll 一次执行单个事件。在重负载下,一些事件被排队,然后循环执行。在处理队列时,如果第一个事件修改了下一个计时器的间隔 - 它变为“未就绪”。但随后循环继续到第二个计时器,导致 read() on-ready-anymore 计时器。

关于linux - epoll 为 timerfd 报告 EPOLLIN 后,read() 返回 EAGAIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34624230/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com