2013-02-20 5 views
59

Arbeiten auf einer Android-und iOS-basierten Anwendung, die Kommunikation mit einem Server auf dem gleichen Gerät ausgeführt werden muss. Derzeit mit TCP-Loopback-Verbindung für die Kommunikation mit App und Server (App geschrieben in Benutzerschicht, Server in C++ mit Android NDK geschrieben)Leistung: TCP Loopback-Verbindung vs Unix-Domain Socket

Ich frage mich, ob der Austausch von Interkommunikation mit Unix-Domain-Socket würde die Leistung verbessern?

Oder gibt es im Allgemeinen irgendwelche Beweise/Theorie, die beweist, dass Unix-Domain-Socket bessere Leistung als TCP-Loopback-Verbindung geben würde?

+1

Denken Sie daran, dass lokale Sockets (UNIX-Domain-Sockets) eine Datei im Dateisystem benötigen. Die Verwendung der TCP-Loopback-Adresse hält alles im Speicher. Und wenn Sie Remote-TCP-Sockets verwenden müssen, ist es möglicherweise einfacher, einen anderen TCP-Socket zu integrieren, anstatt mit einer neuen Socket- und Adressfamilie zu spielen. –

+0

Ich habe gerade einen Link gefunden http://bhavin.directi.com/unix-domain-sockets-vs-tcp-sockets/ – RDX

+0

@JoachimPileborg Bei der Entwicklung nur für Linux (Android) gibt es die Möglichkeit, _abstract_ UNIX-Domain-Socket-Adressen zu verwenden , die keine Datei im Dateisystem benötigen. – thuovila

Antwort

61

Ja, die lokale Interprozesskommunikation durch Unix-Domain-Sockets sollte schneller sein als die Kommunikation durch Loopback-Localhost-Verbindungen, da Sie weniger TCP-Overhead haben, siehe here und here.

+10

der erste Link zitiert die zweite Verbindung, die von 2005 (alt) ist. und es deckt nur FreeBSD –

+3

Diese Antwort ist falsch, wenn getestet Loopback TCP auf modernen Linux ist so schnell und manchmal schneller als UDS. kann Benchmark zur Verfügung stellen, wenn erforderlich – easytiger

+45

Ich benötige, dass Sie Benchmark zur Verfügung stellen. – ggPeti

5

Unix-Domain-Sockets sind oft doppelt so schnell wie ein TCP-Socket, wenn beide Peers auf demselben Host sind. Die Unix-Domain-Protokolle sind keine eigentliche Protokoll-Suite, sondern eine Möglichkeit, Client/Server-Kommunikation auf einem einzelnen Host unter Verwendung der gleichen API, die für Clients und Server auf verschiedenen Hosts verwendet wird, durchzuführen. Die Unix-Domain-Protokolle sind eine Alternative zu den Interprocess-Communication-Methoden (IPC).

19

Redis benchmark zeigt Unix-Domain-Socket kann erheblich schneller sein als TCP-Loopback.

Wenn die Server- und Client-Benchmark-Programme auf derselben Box ausgeführt werden, können sowohl die TCP/IP-Loopback- als auch die Unix-Domain-Sockets verwendet werden. Je nach Plattform können Unix-Domain-Sockets etwa 50% mehr Durchsatz erreichen 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 relevant, wenn der Durchsatz hoch ist.

Throughput per data size

29

Dieser Benchmark: https://github.com/rigtorp/ipc-bench bietet Latenz und Durchsatz-Tests für TCP-Sockets, Unix Domain Sockets (UDS) und Rohren.

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: 253702 msg/s 

UDS average throughput: 1733874 msg/s 

PIPE average throughput: 1682796 msg/s 

66% Latenz Reduktion und fast 7X mehr Durchsatz erklären, warum die meisten leistungskritische Software, um ihre eigenen IPC eigenes Protokoll hat.

+23

Ich bemerke, dass Sie viele Antworten haben, die Ihnen empfehlen, was Ihr Produkt zu sein scheint. Bitte lesen Sie [diese Hilfe-Center-Seite] (http://stackoverflow.com/help/behavior), insbesondere: *> Geben Sie gute, relevante Antworten ein, und wenn einige (aber nicht alle) zufällig über Ihr Produkt oder Ihre Website sind in Ordnung. Sie ** müssen ** jedoch Ihre Zugehörigkeit in Ihren Antworten angeben. Wenn ein großer Prozentsatz Ihrer Beiträge eine Erwähnung Ihres Produkts oder Ihrer Website enthält, sind Sie wahrscheinlich aus den falschen Gründen hier. * – Bob

+5

Hört sich für mich so an, als wäre ihr Produkt eine Antwort auf das Problem! Vielleicht antworten sie deshalb auf diese Fragen; weil sie eine Antwort wissen. – GreenReaper

+0

Dies ist eine gute Antwort, weil es einige Nummern hat. Der Durchsatz von TCP zu UNIX ist 350% besser, UNIX zu PIPE 40% zu einem i5. –