我想知道与postgresql的UNIX域套接字连接是否比高并发率的本地主机的tcp连接更快,如果有的话,是多少呢?
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()
或每个方向write()
),因此我认为差异可以忽略不计.IP堆栈在层之间移动时不需要复制数据包,但它必须操纵内部数据结构以添加和删除更高层的数据包标头.
afaik,unix域套接字(UDS)就像系统管道一样工作,它仅发送数据,不发送校验和和其他附加信息,不使用三向握手作为TCP套接字...
ps:也许UDS会更快