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 我应该期望unix套接字比本地环回TCP快50倍吗?_Sockets_Unix Socket - Fatal编程技术网

Sockets 我应该期望unix套接字比本地环回TCP快50倍吗?

Sockets 我应该期望unix套接字比本地环回TCP快50倍吗?,sockets,unix-socket,Sockets,Unix Socket,我正在开发一个开源软件包,它使用套接字(TCP)来交换数据。在Linux上,它可以使用本地Unix套接字或远程套接字。当我比较本地套接字和远程本地环回的性能时,我发现Unix套接字的速度要快50倍。其他一切都是一样的 这是预期的性能差异,还是表明代码中存在错误 在大多数情况下,数据交换是双向的,通常类似于一个字节的命令(uint8\t),用来说明发生了什么,然后是一组数据,通常大约1kb。如果单独发送初始字节,则协议实际上肯定会遇到Nagle算法。使用缓冲,或writev(),或sendmsg(

我正在开发一个开源软件包,它使用套接字(TCP)来交换数据。在Linux上,它可以使用本地Unix套接字或远程套接字。当我比较本地套接字和远程本地环回的性能时,我发现Unix套接字的速度要快50倍。其他一切都是一样的

这是预期的性能差异,还是表明代码中存在错误


在大多数情况下,数据交换是双向的,通常类似于一个字节的命令(
uint8\t
),用来说明发生了什么,然后是一组数据,通常大约1kb。

如果单独发送初始字节,则协议实际上肯定会遇到Nagle算法。使用缓冲,或
writev()
,或
sendmsg()
,一次发送所有数据。

如果单独发送初始字节,您的协议实际上肯定会运行Nagle算法。使用缓冲,或
writev()
,或
sendmsg()
,一次发送所有数据。

我可以通过禁用Nagle的算法来测试这一点吗?当然可以,也许您希望在生产代码中这样做,但如果效率是一个主要问题,您仍然应该自己进行缓冲或尽可能多地收集数据。谢谢,我将在下周对此进行测试,然后可能会将此标记为答案。确认禁用Nagle的算法可以显著提高性能。对于正在查看的任何人,有关如何执行此操作,请参见。在本例中,由于您的协议实现,对其进行了改进。一般来说,这不是一个好主意,在大多数情况下,缓冲或收集写入都会更好,包括这一种。我可以通过禁用Nagle的算法来测试这一点吗?当然可以,也许你想在生产代码中这样做,但是,如果效率是一个主要问题,您仍然应该尽可能多地进行自己的缓冲或收集写入。谢谢,我将在下周对此进行测试,然后可能会将此标记为答案。确认禁用Nagle的算法可以显著提高性能。对于正在查看的任何人,有关如何执行此操作,请参见。在本例中,由于您的协议实现,对其进行了改进。一般来说,这不是一个好主意,在大多数情况下,缓冲或聚集写入会更好,包括这一种。