1

私は、いくつかの計算を行い、ファイル File.txt に書き込む別のアプリケーション B を呼び出すアプリケーション A を持っています。A は複数のスレッドを介して B の複数のインスタンスを呼び出し、各インスタンスは同じファイル File.txt に書き込もうとします。複数のスレッドが同じファイルにアクセスしようとすると、ファイルアクセスがスローされますが、これは一般的です。

シングルトン クラスでコンカレント キューを使用するアプローチを試みたところ、B の各インスタンスがキューに追加され、このクラスの別のスレッドがキューから項目をデキューし、ファイル File.txt に書き込みます。キューは同期的にフェッチされ、書き込み操作は成功しました。これは正常に動作します。

キューにスレッドとアイテムが多すぎると、ファイルの書き込みは機能しますが、何らかの理由でキューがクラッシュしたり突然停止したりすると、ファイルに書き込まれるはずのすべての情報が失われます。

キューを使用せずに B からファイルを同期的に書き込むと、ファイルのロックをチェックする必要があるため遅くなりますが、B がすぐにファイルに書き込んだ後はデータが失われる可能性が低くなります。

このシナリオを処理するための最良のアプローチまたは設計は何ですか? ファイル書き込み完了後のレスポンスは不要です。ファイルの書き込みが完了するまで B を待たせることはできません。

非同期待機ファイルの書き込みはここで役に立ちますか?

4

2 に答える 2

1

あなたがしたことは、できる限りのことだと思います。問題が解決しない場合は、プロデューサー/コンシューマー キュー ソリューションを調整する必要があるかもしれませんが、このアプローチはかなりうまくいっているように思えます。

メモリ内キューが答えでない場合は、メッセージ キューとリスナーのプールにそれを外部化することで改善される可能性があります。

リレーショナル データベースとトランザクション マネージャーは、この問題を解決するために生まれました。ファイルベースのソリューションを使い続ける理由 代替案を検討することは可能ですか?

于 2017-01-09T14:17:27.220 に答える