Tips

グローバルセマフォを使用する場合の注意点

日付2006/08/25
ID43988 (英語原文参照)
バージョン2004
プラットフォームMac & Win

クライアント/サーバ環境でグローバルセマフォを使用する場合、注意していないと、ネットワークに多大な負担がかかってしまうかもしれません。たとえば次のようなコードを考慮してみましょう:




セマフォがクリアされるまで待機するというコードですが、ループがあまりにも短いため、ネットワークに非常な負荷がかかってしまいます。グローバルセマフォは全クライアントの全プロセスで共有される信号であり、コマンド実行のたびにネットーワーク通信が発生します。ループが短時間で完了するものであれば、それだけ多量のネットワーク通信が発生します。

このような場合、データベースの構造をよく解析し、セマフォのチェックを実行するための適切な間隔を決定したほうが望ましいといえます。セマフォをセットしたプロセスが、実行に数秒を要するようなプロセスであれば、セマフォのチェックは1秒に1回実行すれば充分でしょう。たとえば次のようにコードを修正します:




注記:DELAY PROCESSコマンドはユーザ/カスタムプロセスに対しては使用できません。上記のコードは、その他のプロセスについてのみ有効です。DELAY PROCESSコマンドを使用しないのであれば、次のような方法もあります:




この場合、Semaphoreは60ティックごとに実行され、ネットワーク負荷も軽減されます。