进程间通信用 Unix Domain Socket 比 loopback 好在哪?

2021-03-29 21:13:34 +08:00
 zhoudaiyu

为了性能?还是为了 sock 文件权限便于控制?

3806 次点击
所在节点    Linux
20 条回复
unixeno
2021-03-29 21:32:42 +08:00
性能更高,也方便权限控制
guo4224
2021-03-29 21:52:59 +08:00
你还能跑出性能差别来?
zhoudaiyu
2021-03-29 21:54:32 +08:00
@guo4224 明显我这是疑问句
zhoudaiyu
2021-03-29 21:54:49 +08:00
@unixeno 性能差距真的有这么大么
lcdtyph
2021-03-29 21:55:06 +08:00
内核处理 unix domain socket 的时候没有 routing netfilter 这些没用的步骤,所以会比 loopback 更快一些

文件相比 listening socket 更方便控制权限,还能省一个端口号
zhoudaiyu
2021-03-29 21:56:04 +08:00
@lcdtyph 省端口确实没想到
lcdtyph
2021-03-29 22:00:28 +08:00
@lcdtyph

不过性能差距在高负载的时候才能体现出来
nightwitch
2021-03-29 22:03:40 +08:00
获得一定的性能提升。
损失了一定的跨平台性,直到 Win10 17063 版本以后才支持 AF_UNIX.

天下没有免费的午餐。
sherlock1122
2021-03-29 23:46:49 +08:00
UDS 可以传输 fd,实现内存共享。
虚拟化中 vhost user 强依赖这个特性。
wzb0909
2021-03-29 23:52:51 +08:00
Wincer
2021-03-30 00:09:05 +08:00
https://github.com/rigtorp/ipc-bench

Here you have the results on a single CPU 3.3GHz Linux machine :

TCP average latency: 6 us

UDS average latency: 2 us

PIPE average latency: 2 us

TCP average throughput: 0.253702 million msg/s

UDS average throughput: 1.733874 million msg/s

PIPE average throughput: 1.682796 million msg/s
ch2
2021-03-30 02:17:20 +08:00
Loopback 可以跨操作系统,unix_domain_socket 顾名思义
cubecube
2021-03-30 09:56:56 +08:00
@ch2 win 上也有了。。就是这么神奇。java 也支持了
julyclyde
2021-03-30 11:39:23 +08:00
@Wincer 奇怪,凭什么比 pipe 快??
Wincer
2021-03-30 12:20:59 +08:00
@julyclyde 和机器或者操作系统也有关吧,我这是从 StackOverflow 上摘抄的,下面有评论也说他测试 pipe 比 uds 更好的。https://stackoverflow.com/questions/14973942/tcp-loopback-connection-vs-unix-domain-socket-performance
qbqbqbqb
2021-04-09 17:29:01 +08:00
@julyclyde 因为 UDS 本身就是内核级 IPC 机制,完全不走 TCP/IP 协议栈,内核里缓冲区拷贝一下就完事的东西,本来就应该和 pipe 不相上下的。
qbqbqbqb
2021-04-09 17:35:15 +08:00
loopback 接口不走网卡,但是仍要走 TCP/IP 协议栈,还是有一定性能损失的。而且 loopback 接口设计的本意是让开发者可以方便地本地测试网络应用,支持 IPC 只是副产品。UDS 就是专门做本地 IPC 的,更简单纯粹。
qbqbqbqb
2021-04-09 17:38:13 +08:00
另外 UDS 除了 STREAM 和 DGRAM 以外,还支持 SEQPACKET, RDM 等等 TCP/IP 通常情况下不支持的 socket 类型。
(只针对类 UNIX 系统,Windows 10 新增的 UDS 支持在这方面还是有限的)
julyclyde
2021-04-10 11:31:58 +08:00
@qbqbqbqb 你这不是答非所问么。我问的是为什么比 pipe 快,你回答说不相上下
qbqbqbqb
2021-04-10 21:57:10 +08:00
@julyclyde 我是按照 11 楼的数据说的,他给出的数据 UDS 和 PIPE 之间的差距远比两者和 TCP 之间的差距小,有理由认为是误差。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX