マルチスレッド化に関する考慮事項

一般的に、複数のスレッド内でアプリケーションを実行すると、アプリケーションのパ フォーマンスが向上します。ILE RPG の場合には、通常これはあてはまりません。 実際、モジュール・レベルでプロシージャーを逐次化することによってスレッド・セーフティーが 実現された場合、マルチスレッド・アプリケーションのパフォーマンスは、単一ス レッド・バージョンのパフォーマンスより低くなることがあります。

マルチスレッド化された環境内で ILE RPG プロシージャーを 実行することは、そのアプリケーションにおいて他の必要性がある場合 (例えば、Domino(TM) 出口プログラムを書く場合、または Java から短期実行 RPG プロシージャーを呼び出す場合など) に限るようにお勧めします。Java(TM) から呼び出された長期実行 RPG プログラムの場合、RPG プログラムの別個のプロセスを使用するようにお勧めします。

THREAD(*SERIALIZE) 制御仕様書キーワードを指定すると、ILE RPG モジュールについてスレッド・セーフティーを実現する上で役立ちます。 THREAD(*SERIALIZE) を指定すると、ほとんど の変数とすべての内部制御構造が複数のスレッドによって不正にアクセスされないよう 保護されます。スレッド・セーフ・モジュールは、モジュール内のプロシージャーに入ると ロックされ、モジュール内のプロシージャーがまだ実行していないとき はアンロックされます。このようにアクセスを逐次化すると、活動化グループ内のいずれ のモジュール内でも、活動状態になれるスレッドは一度に 1 つだけになります。た だし、複数のモジュール間で共用される記憶域のスレッド・セーフティーの取り扱いは、 まだ、プログラマーに任されています。これは、アプリケーション内にロジックを追加して 記憶域へのアクセスを同期化することによって行います。 例えば、共用ファイル、エ クスポートされた記憶域やインポートされた記憶域、パラメーターのアドレスでアクセ スされた記憶域は、複数のスレッドからモジュールを介して共用することができます。 このタイプの記憶域へのアクセスを同期化するためには、次のいずれか、または両方を 行います。