【发布时间】:2015-06-03 12:07:36
【问题描述】:
我有一个要求,其中服务器需要与 2 个客户端交互,一个驻留在本地计算机上,一个驻留在远程计算机上。
所以,最初我想创建一个套接字,使用 AF_UNIX 与本地客户端进行通信(因为它比 AF_INET 快),并使用 AF_INET 与远程通信,并在它们之间进行轮询。
但在本地客户端的情况下,通道只会在开始时创建,并且将永久存在直到服务器运行,即单次接受,然后是多次读/写。
那么,我可以用 AF_INET 替换这个 AF_UNIX,因为连接建立只会进行一次吗? 在 AF_INET 的情况下,性能会在哪里受到影响?是三次握手还是其他方式?
【问题讨论】:
-
在纯吞吐量测试中,我尝试使用最大的写入和读取将尽可能多的数据推送到管道中,我得到了可比的性能数据。 AF_UNIX 有一点优势,但没什么大不了的。 AF_UNIX 在每次系统调用时始终传输大约 4 倍的数据。 AF_UNIX 的性能也有很大的变化,我认为它对调度程序更加敏感。在最近的戴尔 XPS 13 上使用 kernel-4.11。
-
不过,我一开始并没有测试启动连接的速度。只是直接的 IO 吞吐量。