2010-06-03 1 views
5
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); 

Я немного запутался о maxevents параметра. Предположим, я хочу написать сервер, который может обрабатывать до 10 тыс. Соединений. Смогу ли я определить maxevents как 10000, или он должен быть ниже по какой-то причине?epoll_wait: maxevents

ответ

9

Maxevents - это всего лишь длина массива struct epoll_events, на который указывает *events.

Если ядро ​​имеет больше, чем это количество событий для подачи в вашу программу в это время, оно увидит, что это не так, потому что вы не ожидаете, что многие будут возвращены в этом _wait.

Возможно, вам понадобится экспериментировать с оптимальным размером этого для вашей программы. Оптимальный размер может даже отличаться по архитектуре. Для небольшого числа опрошенных файловых дескрипторов вы можете легко просто установить maxevents на количество файлов (и соответственно размер массива events), но вероятность того, что все файлы, требующие внимания в то же время, будут низкими, поэтому вы, вероятно, сможете для использования более низкого значения maxevents.