他のバージョンの文書10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

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

この関数はメッセージを同期的に送信し受信します。 利用者のバックエンドは、指定されたメッセージを指定された大きさのメッセージキューを使って最初のバックグラウンドワーカに送ります。 ワーカの数が1より大きければ、最初のバックグラウンドワーカは2番目のバックグラウンドワーカにメッセージを送ります。以下同様です。 最終的に、最後のバックグラウンドワーカは利用者のバックエンドにメッセージを送ります。 繰り返し回数が1より大きければ、利用者のバックエンドは最初のワーカにメッセージを送ります。 メッセージが協調して動作するプロセスすべてで繰り返しの回数と等しい回数送信され受信されれば、利用者のバックエンドは最後に受信したメッセージが最初に送信されたものと一致するか確認し、そうでなければエラーを発生します。

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引数は受信したコピーを送ったメッセージと照合するか制御します。 (これには無視できない時間が掛かりますので、ベンチマークの目的には無効にしておくのが便利でしょう。)