关于epoll_wait返回值的一个简单测试


关于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的选择应该在效率和资源间取一个平衡点。

本文永久更新链接地址

相关内容