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