4

すべてのスレッドがネットワークからデータ(1つ以上のファイル)を取得し、処理を実行して、結果をホスティングマシンのハードディスクに保存するマルチスレッドアプリケーションシナリオを想定します。

このようなシナリオでは、ディスクスペースが使い果たされ、予期しないサービス動作(システムクラッシュなど)が発生する可能性が常にあります。

このような場合を避けるために、Javaがハードディスクスペースを予約する手段を提供すると便利ですが、前の質問で確認したように、そのようなオプションは利用できず、利用できたとしても、非効率的な割り当てにつながる可能性があります(たとえば、解凍されたデータの合計サイズを事前に知らない解凍アプリケーションの場合)。

したがって、別の方法として、 「仮想ディスク領域の予約」を行うこともできます。たとえば、メモリに空き領域の静的レジストリを保持し、続行する前に各スレッドにレジストリから容量を要求させることです。

このアプローチのより良い代替案、または改善点はありますか?

そのような機能を実装する(できればオープンソースの)Javaライブラリはありますか?

4

2 に答える 2

2

これを実装する抽象的な方法は、マルチスレッド アプリケーションが使用できるディスク容量の定数またはユーザー入力値を使用し、これを変数として保存し、許可された容量の値を取得する get メソッドと set メソッドを同期させることです。 、スレッドにスペースを割り当てます(必要なだけですが、利用可能な量以上ではありません)。合計からそれを差し引いて、他のスレッドが「ディスクスペース」の減少を確認できるようにし、スレッドが終了してデータが削除されたら、再度追加します使用された「ディスク容量」が他のスレッドで使用できるようになる値は?

編集:

非効率な割り当てにつながる可能性があります(たとえば、解凍されたデータの合計サイズを事前に知らない解凍アプリケーションの場合)。

これが発生し、スレッドが「ディスク容量」の限界に達したことを (ファイルの抽出中の定期的なチェックを通じて) 「認識」した場合、利用可能な場合はさらに容量の割り当てを要求するか、必要なスペースが他のスレッドによって解放されました

于 2012-06-27T21:56:19.037 に答える
1

特定のパーティションの XX% を超えるとアラートがトリガーされるようにすることもできませんか? そうすれば、管理者はデータを削除/コピーしたり、そのマウント ポイントに追加のストレージを追加したりする時間ができますか?

于 2012-06-27T21:59:28.260 に答える