使用基于Android和iOS的应用程序,该应用程序需要与在同一设备中运行的服务器进行通信。目前使用TCP环回连接与App和Server通信(用户层编写的应用程序,使用Android NDK用C ++编写的服务器)
我想知道更换与Unix Domain套接字的内部通信是否会改善性能?
或者一般情况下是否有任何证据/理论证明Unix Domain套接字会提供比TCP环回连接更好的性能?
答案 0 :(得分:84)
答案 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环回。
然而,这种差异仅在吞吐量很高时才有意义。
答案 3 :(得分:6)
当两个对等体位于同一主机上时,Unix域套接字的速度通常是TCP套接字的两倍。 Unix域协议不是实际的协议套件,而是使用与用于不同主机上的客户端和服务器的相同API在单个主机上执行客户端/服务器通信的方式。 Unix域协议是进程间通信(IPC)方法的替代方法。