我正在使用TCP套接字在同一台机器上运行的应用程序之间进行本地IPC。
在这个IPC中交换的数据非常简单:客户端发送一个4字节的请求,服务器发送一个128kB的响应,这基本上是在一个紧凑的循环中发生的。
现在,如果我打开到127.0.0.1或:: 1的连接,我会通过环回获得预期的快捷方式,如this question中所述,并且延迟非常低。
如果我打开与192.168.0.2(机器的本地v4地址)的连接,则会发生同样的事情。网络堆栈看起来足够智能,可以检测到它是同一台机器并且延迟非常低。
现在,如果我打开与我的机器的任何全局v6地址的连接(无论临时与否都无关紧要),如果我在OSX(10.11.3)上,则延迟会大大增加,但不会在Linux上。似乎Linux足够聪明,可以检测到它可能正在使用环回并加快速度,而OSX无法通过v6地址实现这一点。
总结:
这是OSX的已知缺陷,还是Linux正在做一些不应该做的事情?
编辑:我是否使用TCP_NODELAY选项没有区别。