gpt4 book ai didi

postgresql - 为什么 `libpq` 使用轮询而不是通知来获取数据?

转载 作者:行者123 更新时间:2023-11-29 11:22:03 25 4
gpt4 key购买 nike

我正在阅读 libpq 引用资料。它同时具有同步和异步方法。但是我发现了一些奇怪的事情。

当我看到PQsendQuery 函数时,它似乎发送一个查询并立即返回。我希望回调函数得到通知,但没有这样的事情,手册上说 poll 数据可用性。

不明白为什么异步方法要写成轮询的方式。不管怎样,libp 是官方的客户端实现,我相信这样的设计应该是有充分理由的。那是什么?还是我遗漏了其他地方提到的正确回调内容?

最佳答案

在单线程程序的执行模型中,执行流程不能被异步查询返回的数据中断,或者更一般地说,网络套接字。只有信号(SIGTERM 和 friend )可能会中断流程,但信号不能挂接到传入的数据。

这就是为什么无法通过回调来获得传入数据通知的原因。如果您的代码不调用它,发出回调所需的 libpq 中的代码片段将永远不会运行。如果您必须调用它,那么回调的意义就落空了。

Qt 等库提供回调,但它们是从头开始构建的,具有充当事件处理器的主循环。用户代码在回调中组织,并且可以对传入数据进行基于事件的处理。但在这种情况下,库拥有执行流的所有权,这意味着它的主循环轮询数据源。这只是将责任转移到 libpq 之外的另一段代码。

关于postgresql - 为什么 `libpq` 使用轮询而不是通知来获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19335408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com