如何让 Postgres 后台工作人员根据信号休眠和唤醒?
How to make a Postgres background workers sleep and wake up on a signal?
PostgreSQL 利用 background workers 允许进程以并发方式工作,并且它们有一个 API 供 backend/extension 开发人员控制它们。到目前为止,我已经在演示扩展中成功地使用了这个功能,成功地产生了一些工人。
我的情况是我的一名工人必须等待另一名工人完成。到目前为止,我正在做的是在一个空闲的工作人员上无限循环,直到等待的工作人员完成,这可能是非常低效的。所以我想知道在发送某些信号之前如何让空闲进程休眠?我要找什么?是否有执行类似操作的扩展程序以便我可以用作指导?
您可以使用咨询锁。它们与交易无关。
另一种选择是使用"light-weight locks"(LWlock),a.k.a。闩锁,在后端可用。
我认为执行此类操作的官方方法是使用条件变量,在文件 src/backend/storage/lmgr/condition_variable.c
中实现
我没有看到它被用在任何 "contrib" 扩展中,但是,只有核心代码。
PostgreSQL 利用 background workers 允许进程以并发方式工作,并且它们有一个 API 供 backend/extension 开发人员控制它们。到目前为止,我已经在演示扩展中成功地使用了这个功能,成功地产生了一些工人。
我的情况是我的一名工人必须等待另一名工人完成。到目前为止,我正在做的是在一个空闲的工作人员上无限循环,直到等待的工作人员完成,这可能是非常低效的。所以我想知道在发送某些信号之前如何让空闲进程休眠?我要找什么?是否有执行类似操作的扩展程序以便我可以用作指导?
您可以使用咨询锁。它们与交易无关。
另一种选择是使用"light-weight locks"(LWlock),a.k.a。闩锁,在后端可用。
我认为执行此类操作的官方方法是使用条件变量,在文件 src/backend/storage/lmgr/condition_variable.c
中实现我没有看到它被用在任何 "contrib" 扩展中,但是,只有核心代码。