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