2021-05-12 14:32:11
關於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 : %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
相關文章