複数のスレッドを作成していますが、すべてのスレッドが同じプロパティ ファイルを読み取ります (プロパティ ファイルへの書き込み操作は行われません)。同じプロパティ ファイルが複数のスレッドによって複数回読み取られるため、パフォーマンスのオーバーヘッドが発生しますか?
2 に答える
プロパティ ファイルを一度ロードし、すべてのスレッドで同じPropertiesインスタンスを使用することをお勧めします。
一度ロードすると、ディスク アクセスが減少します。
- このアプリケーションのパフォーマンスの向上
- システム全体の可用性の向上
複数の読み取りは同時実行の問題ではありません。
didiercのコメントは、ボトルネックの可能性を強調しています。プロパティへの各アクセスは同期されているため、スレッドが値を読み取ると、他のすべてが待機する可能性があります。
これを回避するにProperties
は、コンストラクターまたはスレッドの初期化での使用を制限することができます。メソッドp.getProperty( XXX )
内のループで使用しないでください。Thread.run()
答えは「場合による」です。ほとんどの場合、プロパティ ファイルの読み取りに加えて、各スレッドが実行する作業量に依存します。各スレッドがファイルの読み取りに加えて多くの作業を行っても、パフォーマンスはそれほど影響を受けません。
潜在的な正確性の問題についてもっと心配する必要があります。異なるスレッドが異なるプロパティを使用した場合、プログラムは正しく動作しますか? そうでない場合、プログラムには競合の原因となるバグがあります。プログラムの実行中にプロパティ ファイルが変更 (または削除) されると、一部のスレッドが異なるプロパティを使用し、誤った計算が行われる可能性があります。
プロパティ ファイルは、プログラムの構成に使用されます。通常、プログラムは、実際の作業を行う前に、起動直後にすべての構成情報を読み取ります。したがって、構成に問題があると、すぐに失敗する可能性があります。おそらく、スレッドの生成を後で行う実際の作業として扱い、同様に行う必要があります。これにより、プログラムのユーザーは、スレッドごとに 1 つのメッセージではなく、構成内の障害ごとに 1 つのエラー メッセージのみを受け取るようになります。