关于epoll_wait返回值的一个简单测试
void test(int epollfd){ struct epoll_event events[MAX_EVENT_NUMBER]; int number;
while (1) { number = epoll_wait(epollfd, events, MAX_EVENT_NUMBER, -1); printf(“number : %2d\n\n”, number); for (i = 0; i < number; i++) { sockfd = events[i].data.fd;
if (sockfd == listenfd) {/*用户上线*/
} else if (events[i].events & EPOLLIN) {/*有数据可读*/
} else if (events[i].events & EPOLLOUT) {/*有数据可写*/
} else {/*出错*/
} } }}
通过测试发现epoll_wait返回值number是不会大于MAX_EVENT_NUMBER的。
测试过程中,连接的客户端数远大于MAX_EVENT_NUMBER,由此可以推论:epoll_wait()每次返回的是活跃客户端的个数,每次并将这些活跃的客户端信息加入到events[MAX_EVENT_NUMBER]。
由此可见,活跃客户端的个数相同的情况下,events[MAX_EVENT_NUMBER]越大,epoll_wait()函数执行次数越少,但是events[MAX_EVENT_NUMBER]越大越消耗存储资源。
所以,MAX_EVENT_NUMBER的选择应该在效率和资源间取一个平衡点。
而消极的人则在每个机会都看到某种忧患。