プロセス間通信:イベント通知

Stratus VOSにも異なるプロセスの間でデータを共有ややり取りする手法が提供されてます。共有や受け取りを行うには事前にプログラミングしておく必要があります。任意のプログラム同士でデータをやり取りというのは難しいです。

簡単な通信の1つにイベント通知があります。AプロセスからBプロセスが通信を行うとすると、Aプロセスからイベント通知APIを呼び出すとBプロセスへ通知され、Bプロセスはイベント通知のイベントが発生します。当然Bプロセスはイベント通知を受けるためにイベント通知のイベントを待っている状態でなければなりません。イベントは実ファイルを使って処理されます。最初に実ファイルパス名を決定し、s$attach_eventというAPIを呼び出してイベントの用意をします(ABプロセス双方とも)。Aプロセスは通知にs$notify_eventというAPIを呼び出すことで通知処理を行います。Bプロセスはイベントの用意後に戻されたIDとカウントを使用してs$wait_eventにてイベントを受けるまで待機します。(他のイベント待ちする処理も行っておく)Aプロセスから通知されるとs$wait_eventから抜けてくるので、s$read_eventというAPIでイベント通知を受けます(当然の処理として、待機する何のイベントが発生したのかチェックする必要がありますが)。これで通知されたことによる各種処理を実施することになります。イベント通知には4バイト(fixed bin(31)サイズ)のイベントデータの受け渡しも可能です。これを超えるデータを渡したい場合は、別の手段を使う必要があります。

イベント通知は、何らかのファイル作成をしてその完了を通知するとか、簡単なプロセスへの制御などで使われる可能性があります。まあ、ファイルも巨大でなく、レコード単位の受け渡しだとキュー通信を使った方が処理が簡単になります。また、プロセス間通信ではないですが、タイマーイベントという一定時間経過したらOSから通知してね・・・みたいな使い方もできます。イベントの用意をしたら、s$set_time_eventというAPIで秒数を指定してイベントを待機し、通知されたイベントを判定してタイマーイベントなら当該処理を行うという使い方をします。イベント通知が不要になったらs$detach_eventでリソースを解放します。プログラム終了時にも解放されますが、自分が使ったリソースは自分で解放した方がマナーがいいと思いますし、ルーチンを別のプログラムへ流量したときに解放し忘れがなくなると思われます。