Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets TCP环回连接与Unix域套接字性能_Sockets_Unix_Tcp_Loopback_Unix Socket - Fatal编程技术网

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

Sockets TCP环回连接与Unix域套接字性能,sockets,unix,tcp,loopback,unix-socket,Sockets,Unix,Tcp,Loopback,Unix Socket,在基于Android和iOS的应用程序上工作,需要与运行在同一设备上的服务器进行通信。目前使用TCP回环连接与APP和服务器通信(应用程序编写在用户层,服务器用C++编写的Android NDK)< /P> 我想知道用Unix域套接字替换内部通信是否会提高性能 或者一般来说,是否有证据/理论证明Unix域套接字的性能优于TCP环回连接?是的,Unix域套接字的本地进程间通信应该比环回本地主机连接的通信更快,因为您的TCP开销更少,请参阅。当两个对等方位于同一主机上时,Unix域套接字的速度通常是

在基于Android和iOS的应用程序上工作,需要与运行在同一设备上的服务器进行通信。目前使用TCP回环连接与APP和服务器通信(应用程序编写在用户层,服务器用C++编写的Android NDK)< /P> 我想知道用Unix域套接字替换内部通信是否会提高性能


或者一般来说,是否有证据/理论证明Unix域套接字的性能优于TCP环回连接?

是的,Unix域套接字的本地进程间通信应该比环回本地主机连接的通信更快,因为您的TCP开销更少,请参阅。

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

Redis显示Unix域套接字可以比TCP环回快得多

当服务器和客户端基准测试程序在同一台机器上运行时,可以同时使用TCP/IP环回和unix域套接字。根据平台的不同,unix域套接字的吞吐量可以比TCP/IP环回(例如在Linux上)多50%左右。redis基准的默认行为是使用TCP/IP环回

然而,这种差异仅在吞吐量较高时才起作用

此基准: 为TCP套接字、Unix域套接字(UDS)和管道提供延迟和吞吐量测试

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自定义协议。

请记住,本地套接字(UNIX域套接字)需要文件系统中的文件。使用TCP环回地址将所有内容都保存在内存中。如果您必须使用远程TCP套接字,集成另一个TCP套接字可能会更容易,而不是摆弄新的套接字和地址系列。@JoachimPileborg在仅为Linux(Android)开发时,可以选择使用抽象UNIX域套接字addreses,它不需要文件系统中的文件。请参阅android连接。@Someprogrammerdude他们需要文件系统中的文件,但这并不意味着所有内容都会进入磁盘并返回。@Someprogrammerdude只有文件名、所有权和权限信息会存储在文件系统中。所有实际的数据传输都完全在内存中进行。第一个链接引用了2005年的第二个链接(旧)。而且它只涵盖FreeBSD这个答案是错误的,当在现代linux上测试环回tcp时,它的速度和UDS一样快,有时甚至更快。如果需要,可以提供基准。这个答案绝对正确。环回接口仍然是TCP,这意味着您仍然有TCP的开销(拥塞控制、流控制、流管理(IP数据包排序、重传等))。Unix域套接字不执行上述任何操作,因为它从一开始就设计为在本地运行,这意味着没有拥塞问题,需要流量控制的服务器/客户端之间没有速度差异,没有丢弃的数据包等。如果有疑问,用谷歌搜索这一点并不是什么新鲜事。本地UDP呢?考虑到第一条链路已断开(HTTP 404)。。。这就是为什么stackoverflow的最佳实践是在撰写答案时,至少从源URL提供一个简短/简洁的相关引用(然后当链接下降时,简短的摘要仍然可用)。在我看来,他们的产品似乎是问题的答案!也许这就是他们回答这些问题的原因;因为他们知道答案。这是一个很好的答案,因为它有一些数字。从TCP到UNIX的吞吐量提高了350%,在i5上从UNIX到管道的吞吐量提高了40%。@GreenReaper答案确实相关,但我们的Torusware Speedus产品线。。。随附2个版本,Speedus Lite和Speedus Extreme Performance(EP)并非如此,它让整个产品听起来像是一个廉价的垃圾邮件。不,他的产品与TCP和Unix套接字的比较无关。对于套接字,有很多常识性的替代方法——每一种都不在OP的要求范围内,对于该工具的用法没有充分的解释。是否有一个页面解释如何调用客户端和服务器?