2017-08-18 67 views
1

我正在使用套接字(TCP)来交换数据的开源软件包。在Linux上,它可以使用本地Unix套接字或远程套接字。当我将本地套接字的性能与远程本地环回的性能进行比较时,我发现Unix套接字速度要快50倍。其他一切都是相同的。我应该期望unix套接字比本地环回TCP快50倍吗?

这是性能差异预计,还是它表明代码中的某处出现错误?

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

回答

0

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

+0

我可以通过禁用Nagle的算法来测试吗? – crobar

+0

当然,也许你想在生产代码中这样做,但如果效率是一个主要问题,那么你应该尽可能地自己做缓冲或收集写作。 – EJP

+0

谢谢,我会在下周测试,然后可能将其标记为答案。 – crobar