我是否应该期望 unix 套接字比本地环回 TCP 快 50 倍?
Should I expect unix socket to be 50x faster than local loopback TCP?
我正在开发一个使用套接字 (TCP) 交换数据的开源包。在 Linux 上,它可以使用本地 Unix 套接字或远程套接字。当我通过本地环回比较本地套接字与远程套接字的性能时,我发现 Unix 套接字要快 50 倍。其他都是一样的。
这种性能差异是否在意料之中,还是表示代码中某处存在错误?
在大多数情况下,数据交换是双向的,通常类似于单字节命令 (uint8_t
),说明发生了什么,然后是一堆数据,通常约为 1kb。
如果您单独发送初始字节,您的协议几乎肯定会 运行 进入 Nagle 算法。使用缓冲,或 writev()
,或 sendmsg()
,一次发送所有内容。
我正在开发一个使用套接字 (TCP) 交换数据的开源包。在 Linux 上,它可以使用本地 Unix 套接字或远程套接字。当我通过本地环回比较本地套接字与远程套接字的性能时,我发现 Unix 套接字要快 50 倍。其他都是一样的。
这种性能差异是否在意料之中,还是表示代码中某处存在错误?
在大多数情况下,数据交换是双向的,通常类似于单字节命令 (uint8_t
),说明发生了什么,然后是一堆数据,通常约为 1kb。
如果您单独发送初始字节,您的协议几乎肯定会 运行 进入 Nagle 算法。使用缓冲,或 writev()
,或 sendmsg()
,一次发送所有内容。