Документация по PostgreSQL 9.4.1 | |||
---|---|---|---|
Пред. | Уровень выше | Приложение E. Дополнительно поставляемые модули | След. |
E.41. test_shm_mq
Модуль test_shm_mq представляет пример использования механизмов динамической общей памяти и очереди сообщений в общей памяти для синхронизации процесса, обслуживающего клиента, с одним или несколькими фоновыми рабочими процессами. Он не наделён какой-то полезной нагрузкой сам по себе, а является лишь демонстрацией использования этих механизмов и тестом их функционирования.
Функции этого расширения передают одно сообщение в цикле через цепочку процессов. Содержимое сообщения, размер очереди сообщений, через которое оно передаётся, и число процессов в цепочке можно настроить. В конце сообщение можно проверить и убедиться в том, что оно не было испорчено при передаче.
E.41.1. Функции
test_shm_mq(queue_size int8, message text, repeat_count int4 default 1, num_workers int4 default 1) RETURNS void
Эта функция передаёт и принимает сообщения синхронно. Процесс, обслуживающий пользователя, передаёт указанное сообщение первому фоновому рабочему процессу через очередь сообщений заданного размера (queue_size). Первый рабочий процесс посылает сообщение второму, если число рабочих процессов (num_workers) больше одного, и так далее. В конце концов последний рабочий процесс возвращает сообщение процессу, обслуживающему пользователя. Если число повторений (repeat_count) больше одного, обслуживающий процесс вновь передаёт сообщение первому рабочему процессу. Когда сообщение будет передано и получено всеми координирующими процессами заданное число (repeat_count) раз, обслуживающий процесс проверяет, совпадает ли окончательно полученное сообщение с отправленным изначально, и выдаёт ошибку, если это не так.
test_shm_mq_pipelined(queue_size int8, message text, repeat_count int4 default 1, num_workers int4 default 1, verify bool default true) RETURNS void
Эта функция передаёт одно сообщение заданное число (repeat_count) раз первому рабочему процессу через очередь заданного размера (queue_size). Затем эти сообщения передаются каждому рабочему процессу по порядку, опять же через очередь заданного размера. Наконец, последний рабочий процесс возвращает сообщения процессу, обслуживающему пользователя. Этот процесс выполняет передачу и приём в неблокирующем режиме, так что он может начать получать копии сообщений до того, как закончит передавать все копии сообщения. Аргумент verify определяет, будут ли полученные копии сообщения сравниваться с отправляемым сообщением. (Это занимает определённое время, так что имеет смысл отключить эту проверку при тестировании производительности.)
Пред. | Начало | След. |
test_parser | Уровень выше | tsearch2 |