如何使Postgres后台工作者在信号上睡觉和醒来?

问题描述 投票:0回答:2

PostgreSQL利用background workers允许进程以并发方式工作,并且它们具有供后端/扩展开发人员控制它们的API。到目前为止,我已经成功地在演示扩展中成功使用了此功能,并成功产生了许多工作人员。

我处于一个工人不得不等待另一个工人完成的情况。到目前为止,我正在做的事情是在闲置的工作程序上执行无限循环,直到等待完成的工作程序完成为止,这可能效率很低。所以我想知道在发送某些信号之前如何使空闲进程进入睡眠状态?我要找什么?是否有类似功能的扩展名,以便我可以用作指导?

c postgresql postgresql-12 postgresql-extensions
2个回答
1
投票

我认为执行类似操作的官方方法是使用条件变量,该条件变量在文件src / backend / storage / lmgr / condition_variable.c中实现

但是我看不到它在任何“ contrib”扩展中使用,只是核心代码。


1
投票

您可以使用咨询锁。它们与交易无关。

另一种选择是使用“轻型锁”(LWlock),也称为闩锁,在后端可用。

© www.soinside.com 2019 - 2024. All rights reserved.