9.3 9.4 9.5 9.6 10 11
问题报告 纠错本页面

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参数控制接收到的拷贝是否与发送的消息对照。 (它花费大量的时间,所以为了基准测试的目的,禁用它会非常有用。)