В чем преимущество использования epoll с create1() вместо того, чтобы создать запрос()
Я переписываю многопоточное приложение Linux-2.6.32+ для замены select
с помощью epoll
.
Man-страницы для epoll_create1(2) объявляют, что:
Если флаги равны 0, то, кроме того, что устаревший аргумент размера отброшен, epoll_create1() является тем же самым, что и epoll_create().
Но разве этот устаревший аргумент размера не используется в epoll_wait(2)
как maxevents
?
epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
Это означает, когда используя epoll, мы можем избежать объявления максимального числа событий в epoll_create1
, но рано или поздно нам придется ссылаться на него при вызове epoll_wait
? Если да, то какой смысл вводить epoll_create1
в игру?
2 ответа:
Нет, с
Более старые версииepoll_wait
,maxevents
сообщает вам максимальное количество событий, которые будут возвращены . это не имеет никакого отношения к тому, сколько из них поддерживается в ядре.epoll_create
использовали размер для установки определенных ограничений, но он больше не используется, поэтому комментарий, что аргументsize
устарел.Преимущество использования
epoll_create1
заключается в том, что оно позволяет указать флаги, которые, как я думаю, в настоящее время ограничены close-on-exec (так что файловый дескриптор автоматически закрывается, когдаexec
Инг другой процесс).
epoll_create1()
предоставляют способ установки флага. Излишне устанавливать размер сейчас.Фактически в исходном коде ядра: /fs / eventpoll.c
SYSCALL_DEFINE1(epoll_create, int, size) { if (size <= 0) return -EINVAL; return sys_epoll_create1(0); }
Параметр
epoll_wait()
max_events
предназначен для управления обратным счетом fd, а не общим счетом fd во всей структуреeventpoll