我想知道与 postgresql 的 UNIX 域套接字连接是否比来自 localhost 的高并发率的 tcp 连接更快,如果是,那么快多少?
5 回答
Postgres 核心开发人员 Bruce Momjian 曾在博客中讨论过这个主题。Momjian 表示,“Unix 域套接字通信明显更快。” 他测量了查询网络性能,显示本地域套接字比使用 TCP/IP 堆栈快 33%。
UNIX域套接字应该比环回接口上的TCP套接字提供更好的性能(更少的数据复制,更少的上下文切换),但我不知道PostgreSQL是否可以证明性能提升。
我在 FreeBSD 邮件列表中找到了一个小比较:http: //lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html。
我相信 UNIX 域套接字在理论上比环回接口上的 TCP 套接字提供更好的吞吐量,但实际上差异可能可以忽略不计。
通过 UNIX 域套接字承载的数据不必通过 IP 堆栈层上下移动。
回复:亚历山大的回答。AFAIK 你不应该在每个方向上获得一个以上的上下文切换或数据副本(即对于每个read()
or write()
),因此我相信差异可以忽略不计。IP 堆栈不需要在数据包在层之间移动时复制数据包,但它确实必须操纵内部数据结构来添加和删除更高层的数据包标头。
afaik,unix域套接字(UDS)像系统管道一样工作,它只发送数据,不发送校验和和其他附加信息,不使用三向握手作为TCP套接字......
ps:也许UDS会更快
localhost 上的 TCP 套接字通常使用 UNIX 域套接字来实现,因此大多数系统上的答案可以忽略不计。然而,这在任何方面都不是标准的——这只是它通常是如何完成的,因此你不应该依赖它。