web-dev-qa-db-fra.com

TCP connexion en boucle contre les performances du socle de domaine Unix)

Travailler sur une application Android et iOS qui nécessite une communication avec un serveur s'exécutant sur le même appareil. Utilisant actuellement la connexion en boucle TCP pour communiquer avec l'application et le serveur (application écrite dans la couche utilisateur, serveur écrite en C++ à l'aide de Android NDK)

Je me demandais si le remplacement de l'intercommunication avec le socket de domaine Unix améliorerait les performances?

Ou en général, existe-t-il des preuves/théorie qui prouvent que le socket de domaine Unix donnerait de meilleures performances que la connexion en boucle {TCP?

91
RDX

Oui, la communication interprocessus locale par les sockets du domaine unix devrait être plus rapide que celle par les connexions localhost en boucle car vous avez moins de temps système, donc TCP, voir ici et ici .

87
0x4a6f4672

Ce repère: https://github.com/rigtorp/ipc-bench fournit des tests de latence et de débit pour TCP sockets, Unix Domain Sockets (UDS) et PIPE .

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

66% de latence et presque 7 fois plus de débit explique pourquoi la plupart des performances Les logiciels critiques ont leur propre protocole personnalisé IPC).

62
Guillermo Lopez

Redis benchmark montre qu'un socket de domaine unix peut être significativement plus rapide que TCP loopback.

Lorsque les programmes de référence de serveur et de client s'exécutent sur la même boîte, les sockets de bouclage TCP/IP et de domaine Unix peuvent être utilisés. Selon la plate-forme, les sockets de domaine unix peuvent atteindre un débit d'environ 50% supérieur à celui du bouclage TCP/IP (sous Linux, par exemple). Le comportement par défaut de redis-benchmark consiste à utiliser le bouclage TCP/IP.

Cependant, cette différence ne compte que lorsque le débit est élevé.

Throughput per data size

31
woodings

Les sockets de domaine Unix sont souvent deux fois plus rapides qu'un socket TCP lorsque les deux homologues sont sur le même hôte. Les protocoles de domaine Unix ne sont pas une suite de protocoles proprement dite, mais un moyen de communication client/serveur sur un seul hôte utilisant la même API que celle utilisée pour les clients et les serveurs sur différents hôtes.Les protocoles de domaine Unix sont une alternative aux méthodes de communication interprocessus (IPC).

6
peterDriscoll