Arbeiten an einer Android und iOS-basierten Anwendung, für die die Kommunikation mit einem Server auf demselben Gerät erforderlich ist. 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 mit dem Unix-Domain-Socket die Leistung verbessern würde.
Oder gibt es generell Hinweise/Theorien, die belegen, dass Unix Domain Sockets eine bessere Leistung erbringen als Loopback-Verbindungen mit TCP?
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 und hier .
Dieser Benchmark: https://github.com/rigtorp/ipc-bench bietet Latenz- und Durchsatztests für TCP - Sockets, Unix Domain Sockets (UDS) und PIPEs.
Here you have the results on a single CPU 3.3GHz Linux machine :
TCP average latency: 6 us
UDS average latency: 2 us
PIPE average latency: 2 us
TCP average throughput: 0.253702 million msg/s
UDS average throughput: 1.733874 million msg/s
PIPE average throughput: 1.682796 million msg/s
Reduzierung der Latenz um 66% und fast 7-facher Durchsatz erklären, warum die meisten Kritische Software verfügt über ein eigenes IPC benutzerdefiniertes Protokoll.
Redis Benchmark zeigt an, dass Unix-Domain-Sockets signifikant schneller sein können als TCP Loopback).
Wenn die Server- und Client-Benchmark-Programme auf derselben Box ausgeführt werden, können sowohl der TCP/IP-Loopback- als auch der Unix-Domain-Sockets verwendet werden. Unix-Domain-Sockets können je nach Plattform einen um rund 50% höheren Durchsatz erzielen als der TCP/IP-Loopback (z. B. unter Linux). Das Standardverhalten von redis-benchmark ist die Verwendung des TCP/IP-Loopbacks.
Dieser Unterschied ist jedoch nur wichtig, wenn der Durchsatz hoch ist.
Unix-Domain-Sockets sind häufig doppelt so schnell wie ein TCP) - Socket, wenn sich beide Peers auf demselben Host befinden. Die Unix-Domain-Protokolle sind keine eigentliche Protokollsuite, sondern eine Methode zur Durchführung der Client/Server-Kommunikation auf einem einzelnen Host mit derselben API, die für Clients und Server auf verschiedenen Hosts verwendet wird Die Unix-Domänenprotokolle sind eine Alternative zu den IPC-Methoden (IPC = Interprocess Communication).