0

在epoll的使用中,通常是这样的:

struct epoll_event ev,events[20];
epfd=epoll_create(256);
。。。
nfds=epoll_wait(epfd,events,40,500);

有些文章说(即in )中的maxevents参数不应超过(即)中的 size 参数。epoll_wait40epoll_wait(epfd,events,40,500);epoll_create256

我认为maxevents参数不应该超过20in ev, events[20],因为事件只能注册到 20 个事件元素;否则,如果有 40 个套接字处于活动状态,那么会发生什么?

顺便说一句,如果我注册超过 20 个套接字并且有超过 20 个活动事件(套接字),但事件数组events[20]只有 20 个事件,会发生什么?

4

1 回答 1

3

在任何一次呼叫中,epoll_wait您最多会收到尽可能多的事件,但如果排队的事件超过了,事件当然不会丢失 - 您只需在稍后的呼叫中获取它们。因为无论如何你都会epoll_wait在一个循环中调用,所以这根本不应该是一个问题。

我能想到的一个有趣的考虑是当您有多个线程同时从同一个 epoll-fd 读取时。在这种情况下,事件数组的大小决定了单个线程处理了多少事件(即,较小的数字可能会给您带来更大的并行度)。

于 2013-05-19T23:10:25.533 回答