F.41. test_shm_mq

test_shm_mq是一个有关如何使用动态共享内存和 共享内存消息队列工具来协调一个用户后端与一个或多个后台工作者 之间工作的例子。它并不自己做任何有用的事情,它只是一个展示这 些工具如何使用的演示,它也是这些工具的一个单元测试。

这个扩展中的函数通过一个进程循环重复地发出相同的消息。该消息 的载荷是用来发送该消息的消息队列的大小,并且该循环中的进程数 是可以配置的。最后,该消息会被验证来确认它在传输中没有被破坏。

F.41.1. 函数

test_shm_mq(queue_size int8, message text,
            repeat_count int4 default 1, num_workers int4 default 1)
    RETURNS void

这个函数同步地发送和接收消息。用户后端用一个给定尺寸的消息队列把提供的 消息发送到第一个后台工作者。第一个后台工作者把该消息发送给第二个后台工 作者(如果工作者的数量大于一)并且如此继续下去。最后,最后一个后台工作 者把该消息发送回给用户后端。如果重复计数超过一,用户后端再将该消息发回 给第一个工作者。一旦该消息被所有协作进程发送和接收的次数等于重复计数, 用户后端会验证最终接收到的消息是否匹配最早发出的消息,如果不匹配会抛出 一个错误。

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

这个函数按照重复计数指定的次数利用给定尺寸的队列多次发出相同的消息给 第一个后台工作者。这些消息接着会依次被转发给每一个后台工作者,在每一 次转发中都会使用给定尺寸的队列。最后,最后一个后台工作者把这些消息发 回给用户后端。该用户后端使用非阻塞的发送和接收,这样它可能会在完成发 送所有消息之前就接收到消息的副本。verify参数控制接收到的 副本是否要和原始发出的消息对比检查(这会花掉一些时间,所以如果是用于 基准测试,关掉它会有所帮助)。