1

何千ものファイルを可能な限り最速の方法でコピーする必要があります。そのために を使用するのは良い考えThreadPoolですか?

非常に多くのアイテムをエンキューできますか?

より良い解決策はありますか?

アップデート

別のネットワークの場所にコピーしたい (ランダム)。

4

3 に答える 3

10

CPUバウンドではなく、IOバウンドになります...ここで多くのスレッドを使用することはあまり意味がありません。それは実際に物事を遅くする可能性があります(特に回転ディスクでは-シーク時間を追加し、バッファの有効性を低下させます)。IMO、単一のバックグラウンドスレッドでそれらを順番に処理することもできます。

于 2012-08-01T07:41:46.607 に答える
4

ファイルが同じ宛先ディスク/ネットワークの場所または同じソースディスク/ネットワークの場所からコピーされている場合、ボトルネックはCPUではなくデータの読み取り/書き込みであるため、複数のスレッドを使用しても意味がありません。

于 2012-08-01T07:41:54.733 に答える
2

はい、ターゲットの宛先がネットワーク経由で接続されている場合、特に「数千のファイル」が十分に小さいために接続のセットアップの待ち時間がかなりの部分を占める場合は、複数のスレッドまたは非同期スレッドプールによって転送全体が確実に高速化されます転送時間の。

使用可能なネットワークリソースに合わせてシステムを調整できるように、転送タスク/スレッドの数を構成可能にする必要があります。適応性のある自動化された方法でそれを行うことは、興味深い演習になるでしょう:)

スレッド/非同期タスクを1つだけ使用すると、特に高帯域幅で高遅延のリンクでは、各ファイルの接続セットアップ時間が非常に重要になり、ネットワークの使用率が大幅に低下します。

于 2012-08-01T08:22:57.580 に答える