TCP环回连接与Unix域套接字性能

时间:2013-02-20 06:53:15

标签: sockets unix tcp loopback unix-socket

使用基于Android和iOS的应用程序,该应用程序需要与在同一设备中运行的服务器进行通信。目前使用TCP环回连接与App和Server通信(用户层编写的应用程序,使用Android NDK用C ++编写的服务器)

我想知道更换与Unix Domain套接字的内部通信是否会改善性能?

或者一般情况下是否有任何证据/理论证明Unix Domain套接字会提供比TCP环回连接更好的性能?

4 个答案:

答案 0 :(得分:84)

是的,unix域套接字的本地进程间通信应该比loopback localhost连接的通信更快,因为你的TCP开销较少,请参阅herehere

答案 1 :(得分:59)

此基准:https://github.com/rigtorp/ipc-bench 提供TCP套接字,Unix域套接字(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自定义协议。

答案 2 :(得分:30)

Redis benchmark显示unix域套接字可能比TCP环回快得多。

  

当服务器和客户端基准程序在同一个盒子上运行时,可以使用TCP / IP环回和unix域套接字。根据平台的不同,unix域套接字可以比TCP / IP环回(例如在Linux上)实现大约50%的吞吐量。 redis-benchmark的默认行为是使用TCP / IP环回。

然而,这种差异仅在吞吐量很高时才有意义。

Throughput per data size

答案 3 :(得分:6)

当两个对等体位于同一主机上时,Unix域套接字的速度通常是TCP套接字的两倍。 Unix域协议不是实际的协议套件,而是使用与用于不同主机上的客户端和服务器的相同API在单个主机上执行客户端/服务器通信的方式。 Unix域协议是进程间通信(IPC)方法的替代方法。