2017-01-19 3 views
0

私はUSBスティックで動作するJavaアプリケーションを開発中です。サーバーからスティックに複数のファイルをダウンロードし、解読します。各ファイルはそれぞれのスレッドで処理されます。以前の実装のバグのために、スレッド数に制限はなく、ファイル数が十分に多くなったときにいくつかのファイルのサイズが0KBになってしまいました(テストでは、26個の小さなファイルがそれぞれ数KBでした) 。この分析では、ファイルが空であったためにダウンロードが失敗した、すなわち解読が何もしなかったことが示されている。このケースでのダウンロードに失敗した典型的な数は6でした。例外は記録されていません。私はまた、コンピュータ上で直接実行されているアプリケーションとそこにダウンロードされているファイルを使ってプロセス全体をテストしましたが、このケースでは(Windows 7とSSDドライブを使用して)この問題は発生しませんでした。JavaのUSBスティックへの並列ファイルのダウンロード

スレッド10個の固定スレッドプールに切り替えると、問題が消えているようです。しかし、私はこの問題が将来、ある時点で再現されないようにしたいと思っていますが、スレッドプールを維持したいのは、プロセス全体を明確にスピードアップするからです。問題は、あまりにも多くのスレッドを使用していないことを確認する方法です。この実装はUSB 2.0と3.0の両方で動作するはずです。

答えて

1

26スレッド数が多いわけではありません。 26スレッド6の中で自分の仕事をやっていない場合は、間違いなくあなたのプログラムにバグがあります。しかし、あなたも私たちもバグが何であるか分からないので、そのバグが10スレッドで表示されるかどうかは確かに言えません。 最悪の場合、診断はありません。初期プログラムを修正し、どこにでも診断を挿入し、バグを見つけて修正する必要があります。その後、スレッドプールサイズで再生し、それが合計ダウンロード時間に影響を与えるかどうかを確認します。 3つ以上のスレッドが2つのスレッドより優位性を持たないことがよくあります。

関連する問題