Czy istnieje kilka prostych zasad kciuk kiedy używać poll
Vs. epoll
w środowisku o niskiej latencji? epoll
powinien mieć wyższy narzut, jeśli monitorowanych jest tylko kilka deskryptorów plików. Proszę dać trochę wglądu, odpowiedzi "sprawdź to sam" umieścić gdzie indziej.poll vs. epoll wglądu
Odpowiedz
Zawsze używaj poll
chyba wszystkie z poniższych kryteriów są spełnione:
- można zapewnić sobie w systemie (Linux), który ma
epoll
lub zapewnić zabezpieczenie dla systemów, które nie. - Masz ogromny liczbę deskryptorów czynną (co najmniej 1000-10000).
- Zestaw deskryptorów plików, z którymi pracujesz, jest stabilny przez długi czas (dodawanie/usuwanie deskryptorów plików z listy
epoll
jest tak samo kosztowne jak operacjapoll
, ponieważ wymaga ona wejścia/wyjścia z przestrzeni jądra).
epoll(7)
podsumowuje to zwięźle: epoll
"dobrze skaluje się do dużej liczby obserwowanych deskryptorów plików." Jednak poll
jest standardowym interfejsem POSIX, więc używaj tego, gdy wymagana jest przenośność.
Tak, skaluje się, ale jeśli liczba fds jest mała, 'poll' powinna być szybsza. – Cartesius00
@ James: Naprawdę chciałbym zobaczyć kilka benchmarków na ten temat. Z własnego doświadczenia wynika, że biorąc pod uwagę, że robisz coś w reakcji na wydarzenie, nie ma dużej różnicy. Biorąc pod uwagę, że sam musisz utrzymywać wektor ankiety, mogę nawet zgadnąć, że epoll jest szybszy. Ważną różnicą jest, jak stwierdzono w tej odpowiedzi, że sonda jest POSIX, a zatem bardziej przenośna. Epoll ma także tę zaletę, że oferuje kilka dodatkowych funkcji. – PlasmaHH
Przede wszystkim poll(2)
jest wyzwalany tylko poziomem, ale epoll(4)
może być użyty jako interfejs wyzwalany na poziomie krawędzi lub poziomu.
Teraz Złożoność: poll
złożoność dotyczące liczby oglądanych deskryptorów (FDS) jest O (n), ponieważ skanuje wszystkie FDS za każdym razem, gdy pojawia się „gotowe” zdarzenie, epoll
jest w zasadzie O (1), gdyż nie wykonaj skanowanie liniowe wszystkich obserwowanych deskryptorów.
Pod względem przenośności - jako specyficzny dla systemu Linux, sugeruję wypróbowanie bibliotek libev i libevent. Sprawdź także znakomity zapis Dana Kegla: "The C10K problem".
Uważam, że punktem o epolu i wielkiej notacji O * nie jest wewnętrzna część żadnej z funkcji *, więc niepoprawne jest powiedzenie, że "sonda skanuje wszystkie deskryptory, podczas gdy epoll nie". * Oba mogą potencjalnie wywołać pojedyncze zdarzenie *. Jednak przy ankiecie użytkownik nie ma innego wyboru, jak tylko przejrzeć całą listę przesłaną w celu znalezienia zdarzeń, podczas gdy z epolem otrzymujesz listę zawierającą tylko faktyczne zdarzenia. Oznacza to, że jeśli serwer jest bardzo zajęty, nie ma żadnej korzyści dla epoll. Jednakże, jeśli utrzymujesz bardzo dużą liczbę deskryptorów przez długi czas ... – delicateLatticeworkFever
... a większość z nich jest bezczynna przez większość czasu, epoll będzie miał przewagę, jeśli masz bardzo szybkie zdarzenia z udziałem tylko kilku połączeń . Tj. O (cokolwiek) dotyczy tego, co jest * możliwe * dla implementacji użytkownika, a nie faktycznego zachowania poll/epoll. – delicateLatticeworkFever
- 1. select vs poll vs epoll
- 2. select(), poll() lub epoll()? dla atrybutu sysfs
- 3. Używanie select()/poll() w sterowniku urządzenia
- 4. Wielowątkowość serwera UDP z epoll?
- 5. Epoll na zwykłych plikach
- 6. Używanie podprocesu wait() i poll()
- 7. Czy epoll jest bezpieczny w użyciu?
- 8. Czy OS X nie obsługuje funkcji epoll?
- 9. poll (2) nie opróżnia kolejki zdarzeń
- 10. Metoda poll() Kafki Consumer zostaje zablokowana
- 11. System powiadomień z p: poll/push
- 12. Co to jest równoważna funkcja C# selekcji/epoll/kqueue?
- 13. Jak dodać funkcję poll do kodu modułu jądra?
- 14. Symulacja efektu select() i poll() w programowaniu gniazda jądra
- 15. pylint fałszywie dodatni E1101: Instancja „POPEN” ma „poll” członek
- 16. Jak zmienić motyw motywu w DDD i wglądu na coś przyjemniejszego?
- 17. metoda vs funkcja vs procedura vs klasa?
- 18. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 19. Opa vs Dart vs Haxe vs coffeescript
- 20. VS 2008 vs VS 2008 Express
- 21. Strona vs Extent vs. Segment vs. Tabele
- 22. Wyniki D: union vs @property
- 23. Crystalspace vs. Irrlicht vs. .....?
- 24. NetSqlAzMan vs AzMan vs (?????)
- 25. SpiderMonkey vs JavaScriptCore vs?
- 26. Klasa vs pakiet vs moduł vs komponent vs kontener kontra serwis vs platforma w świecie Java
- 27. Zmierz czas w Linuksie - czas vs zegar vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
- 28. Co robi epoll z deskryptorem pliku, który odnosi się do katalogu?
- 29. Używanie select/poll/kqueue/kevent do oglądania katalogu dla nowych plików
- 30. IDataErrorInfo vs ValidationRule vs Exception
Prywatne anegdota: moje wyniki badania epoll vs. ankiety w jednym procesie (nie ma żadnych wątków, widły) asynchroniczny serwer HTTP (czyli krótkie czasy połączeń, <1000 jednoczesnych gniazda, dając ~ 10000 wywołań/s), że różnica między nimi jest znikoma. Zobacz mój komentarz do odpowiedzi użytkownika, dlaczego. – delicateLatticeworkFever