52

我想知道与 postgresql 的 UNIX 域套接字连接是否比来自 localhost 的高并发率的 tcp 连接更快,如果是,那么快多少?

4

5 回答 5

59

Postgres 核心开发人员 Bruce Momjian 曾在博客中讨论过这个主题。Momjian 表示,“Unix 域套接字通信明显更快。” 他测量了查询网络性能,显示本地域套接字比使用 TCP/IP 堆栈快 33%。

于 2012-08-24T00:01:55.097 回答
40

UNIX域套接字应该比环回接口上的TCP套接字提供更好的性能(更少的数据复制,更少的上下文切换),但我不知道PostgreSQL是否可以证明性能提升。

我在 FreeBSD 邮件列表中找到了一个小比较:http: //lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html

于 2008-11-02T22:21:55.133 回答
8

我相信 UNIX 域套接字在理论上比环回接口上的 TCP 套接字提供更好的吞吐量,但实际上差异可能可以忽略不计。

通过 UNIX 域套接字承载的数据不必通过 IP 堆栈层上下移动。

回复:亚历山大的回答。AFAIK 你不应该在每个方向上获得一个以上的上下文切换或数据副本(即对于每个read()or write()),因此我相信差异可以忽略不计。IP 堆栈不需要在数据包在层之间移动时复制数据包,但它确实必须操纵内部数据结构来添加和删除更高层的数据包标头。

于 2008-11-02T22:26:31.723 回答
6

afaik,unix域套接字(UDS)像系统管道一样工作,它只发送数据,不发送校验和和其他附加信息,不使用三向握手作为TCP套接字......

ps:也许UDS会更快

于 2008-11-02T22:24:44.800 回答
-4

localhost 上的 TCP 套接字通常使用 UNIX 域套接字来实现,因此大多数系统上的答案可以忽略不计。然而,这在任何方面都不是标准的——这只是它通常是如何完成的,因此你不应该依赖它。

于 2008-11-02T22:07:45.380 回答