Postgres如何在套接字协议方面支持异步(非块)运算符?



我没有找到任何文档来阐明Postgres如何在套接字协议级别处理异步非块请求的请求-响应。

例如,建议在 pg-client 中只使用一个套接字连接到 pg-server 的查询 sql。我想有两种方法可以处理 asyc 操作:

  1. 客户端无法在第一个请求不响应之前发送第二个命令。
client   socket1       server
-----query1---------->
<----response1--------
------query2--------->
<-----response1-------              
  1. socket 同时发送两个查询,并通过唯一标志进行不同的响应。
client       socket1          server
-------query1 + uid:msg1----->
-------query2 + uid:msg2----->
<------response2 + uid:msg2---
<------response1 + uid:msg1---

我认为这应该是将请求作为真正的异步进程处理的第二种方法,但我没有从文档中找到任何资源。 问题:

  1. 哪一个是 Postgres 处理异步套接字操作?
  2. 如果使用第一种方法,为什么?

在网络协议级别,同步模式和异步模式之间没有区别。区别仅在于客户端 API 的工作方式。

在任何给定时间,始终最多有一个语句处于活动状态。例如,请参阅简单协议的文档,但扩展协议的文档是相同的。

区别在于客户端 API 的工作方式:

  • 在同步模式下,客户端线程被阻塞,直到查询结果我们完成。

  • 异步模式下,控制权在发送查询后立即返回到客户端线程,客户端可以在等待服务器响应时执行其他操作。它必须定期轮询套接字以检查结果是否已到达。然后它可以读取和处理结果。

如果要同时运行两个语句,则必须使用两个数据库会话。

最新更新