Arbeiten an einer Android- und iOS-basierten Anwendung, die die Kommunikation mit einem Server erfordert, der auf demselben Gerät ausgeführt wird. Derzeit wird eine TCP-Loopback-Verbindung für die Kommunikation mit App und Server verwendet (App in Benutzerebene geschrieben, Server in C ++ mit Android NDK geschrieben)
Ich habe mich gefragt, ob das Ersetzen der Interkommunikation durch den Unix Domain-Socket die Leistung verbessern würde.
Oder gibt es im Allgemeinen Beweise / Theorien, die beweisen, dass der Unix Domain-Socket eine bessere Leistung als eine TCP-Loopback-Verbindung bietet?
Antworten:
Ja, die lokale Interprozesskommunikation über Unix-Domain-Sockets sollte schneller sein als die Kommunikation über Loopback-Localhost-Verbindungen, da Sie weniger TCP-Overhead haben (siehe hier) .
quelle
Dieser Benchmark: https://github.com/rigtorp/ipc-bench bietet Latenz- und Durchsatztests für TCP-Sockets, Unix Domain Sockets (UDS) und PIPEs.
Eine Reduzierung der Latenz um 66% und ein fast 7-facher Durchsatz erklären, warum die meisten leistungskritischen Programme über ein eigenes benutzerdefiniertes IPC-Protokoll verfügen.
quelle
Der Redis- Benchmark zeigt, dass der Unix-Domain-Socket schneller als der TCP-Loopback sein kann.
Dieser Unterschied ist jedoch nur bei hohem Durchsatz von Bedeutung.
quelle
Unix-Domain-Sockets sind häufig doppelt so schnell wie TCP-Sockets, wenn sich beide Peers auf demselben Host befinden. Die Unix-Domänenprotokolle sind keine eigentliche Protokollsuite, sondern eine Möglichkeit, die Client / Server-Kommunikation auf einem einzelnen Host mithilfe derselben API durchzuführen, die für Clients und Server auf verschiedenen Hosts verwendet wird. Die Unix-Domänenprotokolle sind eine Alternative zu den IPC-Methoden (Interprocess Communication).
quelle