Как заставить Postgres фоновых работников спать и просыпаться по сигналу? - PullRequest
0 голосов
/ 04 марта 2020

PostgreSQL использует фоновых рабочих , чтобы позволить процессам работать параллельно, и у них есть API для разработчиков бэкэнда / расширения, чтобы контролировать их. До сих пор мне удалось успешно поработать с этой функцией в демонстрационном расширении, успешно породив ряд работников.

Я нахожусь в ситуации, когда один из моих работников должен ждать, пока другой не завершит работу sh , То, что я делаю до сих пор, это бесконечный l oop на простаивающем работнике, пока ожидаемый работник не закончится, что может быть весьма неэффективно. Так что мне было интересно, как бы я go заставил процесс ожидания бездействовать, пока не будет послан какой-нибудь сигнал? Что бы я искал? Есть ли расширение, которое делает что-то подобное, чтобы я мог использовать для руководства?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Я думаю, что официальный способ сделать что-то подобное это с помощью условных переменных, реализованных в файле src / backend / storage / lmgr / condition_variable. c

Я не вижу, чтобы это использовалось в любые расширения «contrib», однако, только основной код.

1 голос
/ 04 марта 2020

Вы можете использовать консультативные блокировки. Они не привязаны к транзакциям.

Другой вариант - использовать «легкие замки» (LWlock), то есть защелки, которые доступны в бэкэнде.

...