Projektuję nowy serwer, który musi obsługiwać tysiące połączeń UDP (gdzieś około 100 000 sesji). Wszelkie dane wejściowe lub sugestie, których należy użyć?select vs poll vs epoll
Odpowiedz
Linux: epoll
FreeBSD: kqueue
Okna:?
Istnieją biblioteki otoki, takie jak libevent i libev, które mogą je dla ciebie streścić.
Odpowiedź jest epoll, jeśli używasz systemu Linux, kqueue, jeśli używasz FreeBSD lub Mac OS X, i portów zakończenia i/o, jeśli jesteś w systemie Windows.
Niektóre dodatkowe rzeczy będą (prawie na pewno), które chcesz badania są: techniki wyważania
- obciążenia
- wielowątkowy sieci
- architektura Database
- Doskonałe stoły hash
Dodatkowo, ważne jest, aby było ważne: w UDP nie ma "połączeń" w przeciwieństwie do TCP. Byłoby również w twoim najlepszym interesie, aby zacząć od małych i większych rozmiarów, ponieważ debugowanie rozwiązań opartych na sieci może być wyzwaniem.
Dzięki za odpowiedź. Rozumiem, że nie ma czegoś takiego jak połączenia UDP, ponieważ jest to komunikacja bezpołączeniowa zorientowana na komunikację. Aplikacja, o której myślałem, jest oparta na sesjach, więc zamiast sesji wspomniałem o niej jako o połączeniu. Mój błąd. Próbowałem także ponad 200 000 sesji w oparciu o select z aplikacją wielowątkową. Chciałem tylko zoptymalizować. Nie jest też nowością w budowaniu skalowalnej architektury. Równoważenie obciążenia może nie być odpowiednie dla rodzaju serwera, na który patrzę. Jest to z pewnością sieć wielowątkowa. Najprawdopodobniej użyje pewnego rodzaju wzoru producenta/konsumenta. – ravi
Autor CURL napisał niesamowity artykuł na temat poll vs select vs event libraries.
Ten przewodnik w ogóle nie pomógł. Zasadniczo założono, że wszyscy znają główne różnice między tymi trzema. – enigmaticPhysicist
Podaj co najmniej podsumowanie, a nie tylko odsłonięty link – MikeMB
@enigmaticPhysicist - Zgadzam się z Tobą. Znalazłem ten artykuł bardziej szczegółowo, mam nadzieję, że pomoże: https://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-difference-for-system-architects/ –
- 1. poll vs. epoll wglądu
- 2. select(), poll() lub epoll()? dla atrybutu sysfs
- 3. Używanie select()/poll() w sterowniku urządzenia
- 4. pg_dump vs COPY (SELECT * FROM my_table)
- 5. LinqToSQL Select and SelectMany vs Join
- 6. metoda vs funkcja vs procedura vs klasa?
- 7. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 8. Opa vs Dart vs Haxe vs coffeescript
- 9. VS 2008 vs VS 2008 Express
- 10. Strona vs Extent vs. Segment vs. Tabele
- 11. Crystalspace vs. Irrlicht vs. .....?
- 12. NetSqlAzMan vs AzMan vs (?????)
- 13. SpiderMonkey vs JavaScriptCore vs?
- 14. Symulacja efektu select() i poll() w programowaniu gniazda jądra
- 15. Klasa vs pakiet vs moduł vs komponent vs kontener kontra serwis vs platforma w świecie Java
- 16. Zmierz czas w Linuksie - czas vs zegar vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
- 17. Dla vs. Linq - Performance vs. Future
- 18. IDataErrorInfo vs ValidationRule vs Exception
- 19. Boo vs C# vs Python?
- 20. DbConnection vs OleDbConnection vs OdbcConnection
- 21. Matlab vs Aforge vs OpenCV
- 22. DDS vs AMQP vs ZeroMQ
- 23. ScheduledExecutorService vs Timer vs Handler
- 24. flume vs kafka vs inni
- 25. ActiveMQ vs Apollo vs Kafka
- 26. getBBox() vs getBoundingClientRect() vs getClientRects()
- 27. Object vs Class vs Function
- 28. Wskaźniki vs auto_ptr vs shared_ptr
- 29. fadeIn fadeOut vs vs fadeTo
- 30. DMD vs. GDC vs. LDC
którego używasz? różne os mają różne specyficzne cechy. –
Linux Redhat wersja korporacyjna 5 – ravi
@ravi: Powinieneś także sprawdzić struktury oparte na zdarzeniach (asychroniczne), takie jak Twisted, gdzie możesz napisać swój serwer i przetestować go za pomocą różnych metod głosowania: [TwistedMatrix.com: Wybór reaktora] (http : //twistedmatrix.com/documents/current/core/howto/choosing-reactor.html) –