2012-04-04 2 views
5

Я переписываю многопоточное приложение Linux-2.6.32 + для замены select на epoll.В чем преимущество использования epoll_create1() вместо epoll_create()

Человек страниц для 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 в игру?

Спасибо, что просветили меня по этому вопросу.

ответ

6

Нет, с epoll_wait, maxevents сообщает вам максимальное количество событий, которые будут возвращены . Это не имеет никакого отношения к тому, сколько из них поддерживается внутри ядра.

Старые версии epoll_create использовали размер, чтобы установить определенные ограничения, но он больше не используется, поэтому комментарий, что аргумент size устарел.

Преимущество использования epoll_create1 заключается в том, что он позволяет указать флаги, которые, как мне кажется, в настоящее время ограничены закрытием-exec (так что дескриптор файла автоматически закрывается, когда exec выполняет другой процесс).

+0

Спасибо за объяснение это. В 'epoll_create1' я просто позволяю самому ядру измерять внутренние структуры, хорошо. Я думал, что параметр «maxevents» тоже будет сброшен, но это не тот случай. – noisebleed

1

epoll_create1() поставьте способ установить флаг. Излишне устанавливать размер сейчас.

фактически в исходном коде ядра: /fs/eventpoll.c

SYSCALL_DEFINE1(epoll_create, int, size) 
{ 
    if (size <= 0) 
     return -EINVAL; 

    return sys_epoll_create1(0); 
} 

epoll_wait() paramete max_events для контроля возврата FD рассчитывать не общее количество Fd в целом eventpoll структуры

+0

ОК, теперь я вижу, что аргумент 'size'' epoll_create' и 'maxevents'' epoll_wait' - это не одно и то же. Благодарю. – noisebleed

Смежные вопросы