首頁 > 軟體

關於epoll_wait返回值的一個簡單測試

2020-06-16 17:44:11

關於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 : %2dnn", 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的選擇應該在效率和資源間取一個平衡點。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-04/129817.htm


IT145.com E-mail:sddin#qq.com