137

同じデバイスで実行されているサーバーとの通信を必要とする Android および iOS ベースのアプリケーションでの作業。現在、アプリおよびサーバーとの通信に TCP ループバック接続を使用しています (アプリはユーザー層で記述され、サーバーは Android NDK を使用して C++ で記述されています)。

相互通信を Unix ドメイン ソケットに置き換えるとパフォーマンスが向上するかどうか疑問に思っていました。

または、一般的に、Unix ドメインソケットが TCP ループバック接続よりも優れたパフォーマンスを発揮することを証明する証拠/理論はありますか?

4

4 に答える 4

104

このベンチマーク: https://github.com/rigtorp/ipc-bench は、TCP ソケット、Unix Domain Sockets (UDS)、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% のレイテンシー削減とほぼ7倍のスループットは、ほとんどのパフォーマンス クリティカルなソフトウェアが独自の IPC カスタム プロトコルを備えている理由を説明しています。

于 2015-04-03T16:55:29.253 に答える
50

Redisベンチマークは、UNIX ドメイン ソケットが TCP ループバックよりも大幅に高速になることを示しています。

サーバーとクライアントのベンチマーク プログラムを同じボックスで実行すると、TCP/IP ループバックと UNIX ドメイン ソケットの両方を使用できます。プラットフォームにもよりますが、UNIX ドメイン ソケットは TCP/IP ループバックよりも約 50% 高いスループットを達成できます (Linux など)。redis-benchmark のデフォルトの動作は、TCP/IP ループバックを使用することです。

ただし、この違いは、スループットが高い場合にのみ問題になります。

データサイズあたりのスループット

于 2014-12-04T19:03:56.287 に答える
12

Unix ドメイン ソケットは、両方のピアが同じホスト上にある場合、TCP ソケットの 2 倍の速さであることがよくあります。Unix ドメイン プロトコルは、実際のプロトコル スイートではありませんが、異なるホスト上のクライアントとサーバーに使用される同じ API を使用して、単一のホスト上でクライアント/サーバー通信を実行する方法です。Unix ドメイン プロトコルは、プロセス間通信 (IPC) メソッドに代わるものです。

于 2014-06-09T10:45:26.350 に答える