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

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

我想知道是否用Unix域套接字replace交互会提高性能?

或总体来说有没有证据/理论certificate,Unix域套接字将提供更好的性能,然后TCP环回连接?

是的,通过unix域套接字的本地进程间通信应该比通过回送本地主机连接的通信更快,因为你有更less的TCP开销,请看这里和这里 。

这个基准testing: https : //github.com/rigtorp/ipc-bench提供TCP套接字,Unix域套接字(UDS)和PIPE的延迟和吞吐量testing。

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 

延迟减less66%吞吐量提高7倍,这就解释了为什么大多数性能关键软件都有自己的IPC定制协议。

然而,如果您依赖我们的Torusware Speedus产品(BTW,我在Torusware),这个基于IPC的实现不再需要,它有2个版本,Speedus Lite和Speedus Extreme Performance(EP)。

 TCP average latency: 0 us (actually, the latency is 200 nanoseconds) TCP average throughput: 4785169 msg/s 

Redis 基准testing显示,unix域套接字可能比TCP环回速度快得多。

当服务器和客户端基准testing程序在同一个框上运行时,可以使用TCP / IP环回和unix域套接字。 取决于平台,unix域套接字可以比TCP / IP回送(例如在Linux上)的吞吐量提高约50%。 redis-benchmark的默认行为是使用TCP / IP回送。

但是,这种差异只在吞吐量高时才重要。

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