Czy ogólnie występuje różnica prędkości lub wydajności w blokowaniu i nie blokowaniu gniazd Winsock TCP? Mogę uzyskać różnice obu gniazd, ale nie ma szczegółowego porównania wydajności między tymi dwoma typami.Prędkość/wydajność Charakterystyka blokowania vs niezablokowanie winsock
Odpowiedz
Ponieważ nie chodzi o szybkość. Operacje write
i read
są po prostu kopiowanie pamięci w zamaskowaniu. Wszystko, co robią, to kopiowanie danych odpowiednio do i z jądra. To znaczy. w rzeczywistości nie wysyłają ani nie otrzymują niczego.
Funkcja blokowania a nieblokująca pyta: czy wolisz zablokować te operacje, aż do ukończenia, czy też zwrócić -1 i EAGAIN
na wypadek, gdyby nie można było ich natychmiast wykonać? Na przykład czytasz z gniazda, ale nie ma nic w buforze odbiorczym. Czy wolisz mieć wiszące recv
, dopóki coś nie pojawi się lub nie zwróci -1 EAGAIN
?
Dzięki za oświecenie. –
To dość przebranie z IOCP, gdzie tablice wskaźnika bufora użytkownika są przekazywane do jądra za pomocą wywołań WSASec/WSARecv. Nadal istnieje ruch danych, ale przypuszczam, że bufory sprzętowe NIC mogą być bezpośrednio DMA-em do buforów przestrzeni użytkownika - wycina jeden poziom marnego kopiowania. –
Z mojego doświadczenia wynika, że nieblokujące operacje winsock są nieco wolniejsze, ale znacznie bardziej skalowalne. Faktem jest, że trzeba wykonać dwa wywołania systemowe oraz pewne wywoływanie na poziomie aplikacji podczas wykonywania niezablokowanych operacji we/wy (z IOCP) i jednego wywołania systemowego, jeśli używane jest blokowanie operacji we/wy. Jeśli masz wiele równoczesnych połączeń, niezablokowane operacje we/wy są znacznie szybsze ze względu na bardziej skalowalną architekturę, jeśli są dobrze zaimplementowane.
Jeśli chcesz przesłać dane od punktu do punktu z maksymalną przepustowością - użyj blokowania we/wy. Jeśli chcesz obsłużyć wiele jednoczesnych połączeń klienckich, użyj niezablokowanych operacji we/wy. Nie oczekuj zbyt wiele od żadnego z nich.
Ogólnie rzecz biorąc, chodzi bardziej o architekturę serwerów "sterowaną zdarzeniami a gwintowanymi" niż "blokowanie kontra nieblokowanie". Nie ma uniwersalnej architektury serwera, którą można wykorzystać w każdej sytuacji. To zależy od zastosowania.
- 1. Programowanie Winsock
- 2. odblokować Zablokowane Winsock accept() Zadzwoń
- 3. Charakterystyka działania pamięci mapowane pliku
- 4. Boost :: asio winsock i winsock 2 Problem zgodności
- 5. Błędy redefinition Winsock
- 6. Niewystarczające zasoby winsock
- 7. Oblicz „charakterystyka grupy” bez ddply i scalić
- 8. Asynchroniczna rozdzielczość adresu w winsock?
- 9. Jak wykonać niezablokowanie fopen na nazwanej potoku (mkfifo)?
- 10. Różnice między implementacjami gniazd winsock i BSD
- 11. Jak wyjść z funkcji blokowania accept() w systemie Windows?
- 12. Niezablokowanie odczytu ze standardowego wejścia/wyjścia w języku C#
- 13. Właściwość blokowania animacji Boolean
- 14. PHP Inotify Bez blokowania
- 15. Pisanie własnej metody blokowania
- 16. Android RxJava, bez blokowania?
- 17. Blokowanie bez blokowania
- 18. Zakres blokowania C standard
- 19. kolejka blokowania synchronizowanego pthread
- 20. Sposób blokowania ChildWindow
- 21. Wady blokowania wiersza MySQL
- 22. Uruchamianie blokowania GC ObjectsAllocated
- 23. Kasowanie wzajemnego blokowania wykluczenia (synchronizacja)
- 24. Ruby rozpakować tablica do blokowania
- 25. Połączenie RabbitMQ w stanie blokowania?
- 26. Czy Notepad ++ ma tryb blokowania?
- 27. Podwójne sprawdzanie blokowania - obiektyw c
- 28. C# odczekaj chwilę bez blokowania
- 29. Scala Regex wielokrotnego blokowania przechwytywanie
- 30. Jak uniknąć błędów blokowania SQLiteException
Jeśli cokolwiek, chciałbym oznaczyć to pytanie jako C nie C++. –