
但是,即使我正在使用级别触发事件,我也担心套接字的潜在饥饿.我担心的情况是,有比epoll_event结构更多的套接字.我知道下次我打电话给epoll_wait它会给我剩下的一些,但是我想知道我用什么顺序让他们进入了最后一次没有进行切换的命令.
一个例子:
假设我连接了10个插座并添加到epoll fd.我只有足够的内存用于5个epoll_event结构.假设在每个epoll_wait之间的时间内,所有10个套接字都接收数据.第一个epoll_wait将返回5个epoll_event结构进行处理,让我们说它是套接字1-5.我处理这5个套接字,当我这样做时,会有更多数据进入,所有10个套接字都有更多数据需要读取.我再次进入epoll_wait并获得另外5个epoll_event结构.
我的问题是第二次调用epoll_wait时我会得到5个套接字.它是插座1-5,因为它们首先被添加到epoll FD中吗?或者我会得到套接字6-10,因为在套接字1-5上有更多数据进入之前这些事件被提出了吗?
本质上,epoll_wait就像一个FIFO队列,或者只是扫描一个内部的套接字列表(从而有利于列表中的第一个套接字).
编辑:
这是Linux内核v4.9.62
If more than maxevents file descriptors are ready when
epoll_wait()is called, then successiveepoll_wait()calls will
round robin through the set of ready file descriptors. This
behavior helps avoid starvation scenarios, where a process fails
to notice that additional file descriptors are ready because it
focuses on a set of file descriptors that are already known to be
ready.
转载注明原文:c – 来自epoll_wait的事件的epoll顺序 - 乐贴网