【问题标题】:Is AF_INET slower than AF_UNIX due to three way hand-shake involved in AF_INET?由于 AF_INET 中涉及三向握手,AF_INET 是否比 AF_UNIX 慢?
【发布时间】: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 吞吐量。

标签: sockets ipc


【解决方案1】:

引用Performance: TCP loopback connection vs Unix Domain Socket:

当服务器和客户端基准程序在同一个机器上运行时,可以使用 TCP/IP 环回和 unix 域套接字。根据平台的不同,unix 域套接字可以实现比 TCP/IP 环回(例如在 Linux 上)多 50% 的吞吐量。 redis-benchmark 的默认行为是使用 TCP/IP 环回。

但是,请确保性能提升值得以使应用程序的网络堆栈复杂化为代价(根据客户端位置使用各种类型的套接字)。

【讨论】:

  • 谢谢我的回答。
猜你喜欢
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 2011-04-26
  • 2017-01-16
  • 1970-01-01
  • 2017-07-08
  • 2010-11-12
  • 2010-12-08
相关资源
最近更新 更多