2012-04-04 18 views
5

Przepisuję wielowątkową aplikację Linux-2.6.32 +, aby zastąpić select przez epoll.Jaka jest zaleta korzystania z epoll_create1() zamiast epoll_create()

Strony man dla epoll_create1(2) oświadczam, że:

Jeśli flagi wynosi 0, a następnie, poza faktem, że przestarzałe rozmiar argumentem spadnie, epoll_create1() jest taka sama jak epoll_create().

Jednak nie jest to przestarzały rozmiar argumentem stosowane w epoll_wait(2) jak maxevents?

epoll_wait(int epfd, struct epoll_event *events, 
        int maxevents, int timeout); 

Oznacza to podczas korzystania epoll możemy uniknąć oświadczając maksymalną liczbę zdarzeń w epoll_create1 ale prędzej czy później będziemy musieli odwoływać się do niej podczas wywoływania epoll_wait? Jeśli tak, jaki jest sens wniesienia do gry epoll_create1?

Dzięki za oświecenie mnie w tej sprawie.

Odpowiedz

6

Nie, z epoll_wait, maxevents informuje o maksymalnej liczbie zdarzeń, które zostaną zwrócone . Nie ma nic wspólnego z tym, ile jest przechowywanych w jądrze.

Starsze wersje epoll_create użyły rozmiaru do ustawienia pewnych limitów, ale nie są już używane, stąd komentarz, że argument size jest przestarzały.

Zaletą korzystania z epoll_create1 jest to, że pozwala określić flagi, które moim zdaniem są obecnie ograniczone do close-on-exec (tak, że deskryptor pliku jest automatycznie zamykany, gdy exec inny proces).

+0

Dzięki za wyjaśnienia to. W 'epoll_create1' po prostu pozwoliłem, aby samo jądro wymiarowało wewnętrzne struktury, dobrze. Myślałem, że parametr 'maxevents' również zostanie usunięty, ale tak nie jest. – noisebleed

1

the epoll_create1() podać sposób ustawienia flagi. Nie trzeba teraz ustawiać rozmiaru.

faktycznie w kodzie źródłowym jądra: /fs/eventpoll.c

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

    return sys_epoll_create1(0); 
} 

epoll_wait() Parametrów max_events jest do sterowania zwrot fd nie policzyć liczbę całkowitą fd w całym eventpoll struct

+0

OK, teraz widzę, że argument 'size' z' epoll_create' i 'maxevents' z' epoll_wait' to nie to samo. Dzięki. – noisebleed

Powiązane problemy