为了性能?还是为了 sock 文件权限便于控制?
1
unixeno 2021-03-29 21:32:42 +08:00 via Android
性能更高,也方便权限控制
|
2
guo4224 2021-03-29 21:52:59 +08:00
你还能跑出性能差别来?
|
5
lcdtyph 2021-03-29 21:55:06 +08:00
内核处理 unix domain socket 的时候没有 routing netfilter 这些没用的步骤,所以会比 loopback 更快一些
文件相比 listening socket 更方便控制权限,还能省一个端口号 |
8
nightwitch 2021-03-29 22:03:40 +08:00
获得一定的性能提升。
损失了一定的跨平台性,直到 Win10 17063 版本以后才支持 AF_UNIX. 天下没有免费的午餐。 |
9
sherlock1122 2021-03-29 23:46:49 +08:00 via Android 4
UDS 可以传输 fd,实现内存共享。
虚拟化中 vhost user 强依赖这个特性。 |
10
wzb0909 2021-03-29 23:52:51 +08:00
|
11
Wincer 2021-03-30 00:09:05 +08:00 2
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 |
12
ch2 2021-03-30 02:17:20 +08:00 via iPhone
Loopback 可以跨操作系统,unix_domain_socket 顾名思义
|
15
Wincer 2021-03-30 12:20:59 +08:00 2
@julyclyde 和机器或者操作系统也有关吧,我这是从 StackOverflow 上摘抄的,下面有评论也说他测试 pipe 比 uds 更好的。https://stackoverflow.com/questions/14973942/tcp-loopback-connection-vs-unix-domain-socket-performance
|
16
qbqbqbqb 2021-04-09 17:29:01 +08:00
@julyclyde 因为 UDS 本身就是内核级 IPC 机制,完全不走 TCP/IP 协议栈,内核里缓冲区拷贝一下就完事的东西,本来就应该和 pipe 不相上下的。
|
17
qbqbqbqb 2021-04-09 17:35:15 +08:00
loopback 接口不走网卡,但是仍要走 TCP/IP 协议栈,还是有一定性能损失的。而且 loopback 接口设计的本意是让开发者可以方便地本地测试网络应用,支持 IPC 只是副产品。UDS 就是专门做本地 IPC 的,更简单纯粹。
|
18
qbqbqbqb 2021-04-09 17:38:13 +08:00
另外 UDS 除了 STREAM 和 DGRAM 以外,还支持 SEQPACKET, RDM 等等 TCP/IP 通常情况下不支持的 socket 类型。
(只针对类 UNIX 系统,Windows 10 新增的 UDS 支持在这方面还是有限的) |