加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 为什么`libpq`使用轮询而不是数据提取通知?

发布时间:2020-12-13 16:14:28 所属栏目:百科 来源:网络整理
导读:我正在阅读libpq参考.它同时具有同步和异步方法.我发现了一些奇怪的东西. 当我看到PQsendQuery函数时,它似乎发送一个查询并立即返回.我期望一个回调函数得到通知,但没有这样的事情,手册说要轮询数据可用性. 我不明白为什么异步方法是用轮询方式编写的.无论如
我正在阅读libpq参考.它同时具有同步和异步方法.我发现了一些奇怪的东西.

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

我不明白为什么异步方法是用轮询方式编写的.无论如何,由于libp是官方客户端实现,我相信这个设计应该有充分的理由.那是什么?或者我错过了其他地方提到的正确回调的东西?

在单线程程序的执行模型中,执行流不能被从异步查询返回的数据中断,或者更一般地是网络套接字.只有信号(SIGTERM和朋友)可以中断流量,但信号不能挂接到进入的数据.

这就是为什么不能通过回调来获得传入数据的通知的原因.如果您的代码没有调用它,则libpq中发出回调所需的代码段将永远不会运行.如果你不得不打电话,那就会打败回调的全部内容.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读