Praca na aplikacji opartej na systemie Android i iOS, która wymaga komunikacji z serwerem działającym na tym samym urządzeniu. Obecnie używam połączenia sprzężenia zwrotnego TCP do komunikacji z aplikacją i serwerem (aplikacja napisana w warstwie użytkownika, serwer napisany w C ++ przy użyciu Android NDK)
Zastanawiałem się, czy zastąpienie komunikacji wewnętrznej gniazdem Unix Domain poprawiłoby wydajność?
A może ogólnie rzecz biorąc, są jakieś dowody / teoria, która dowodzi, że gniazdo domeny Unix zapewniłoby lepszą wydajność niż połączenie zwrotne TCP?
Odpowiedzi:
Tak, lokalna komunikacja międzyprocesowa przez gniazda domeny unix powinna być szybsza niż komunikacja przez pętle zwrotne połączeń localhost, ponieważ masz mniejszy narzut TCP, patrz tutaj .
źródło
Ten test porównawczy: https://github.com/rigtorp/ipc-bench zapewnia testy opóźnień i przepustowości dla gniazd TCP, Unix Domain Sockets (UDS) i PIPE.
Redukcja opóźnień o 66% i prawie 7- krotnie większa przepustowość wyjaśniają, dlaczego większość programów o krytycznym znaczeniu dla wydajności ma własny, niestandardowy protokół IPC.
źródło
Test porównawczy Redis pokazuje, że gniazdo domeny unix może być znacznie szybsze niż sprzężenie zwrotne TCP.
Jednak ta różnica ma znaczenie tylko wtedy, gdy przepustowość jest wysoka.
źródło
Gniazda domeny uniksowej są często dwa razy szybsze niż gniazdo TCP, gdy obaj równorzędni są na tym samym hoście. Protokoły domeny uniksowej nie są rzeczywistym zestawem protokołów, ale sposobem wykonywania komunikacji klient / serwer na jednym hoście przy użyciu tego samego interfejsu API, który jest używany dla klientów i serwerów na różnych hostach. Protokoły domeny unix są alternatywą dla metod komunikacji międzyprocesowej (IPC).
źródło