-1

csv に 5 GB の 256 ファイルがあり、これを最適な速度で読み取り、バイナリ形式でデータを書き戻す必要があります。

私はそれを達成するために次の手配をしました:-

ファイルごとに、対応するスレッドが 1 つあります。C 関数 fscanf,fwrite を使用しています。しかし、リソース モニターでは、1 秒あたり 12 MB のハードディスクと 100 % のアクティブな最高時間は表示されません。Google によると、ハードディスクは 100 MB/秒まで読み書きできるとのことです。マシン構成は次のとおりです。- Intel i7 Core 3.4。8コア搭載。

あなたの見通しを教えてください。このプロセスを 1 分以内に完了することを目標にしています。

** 1 つのスレッドを使用するのに 12 分かかりました**

4

1 に答える 1

3

すべてのファイルが同じディスクにある場合、複数のスレッドを使用すると逆効果になる可能性があります。多数のファイルを並行して読み取ると、HDD ヘッドがディスクの異なる領域間を行き来し続けるため、スループットが大幅に低下します。

組み込みの OS ユーティリティがファイルを読み取るのにかかる時間を測定し (Unix では、ddや など)、それcat/dev/nullベースラインとして使用します。書き込みは、スループットとシーク時間の両方の点でコストがかかる可能性があります。

次に、データを大きなチャンクで読み書きするシングルスレッドの実装を考え出し、OS ツールと同様に実行できるかどうかを確認します。

PS 5GB のデータがあり、HDD の最高生スループットが 100MB で、変換されたデータを同じディスクに書き戻す必要がある場合、1 分の目標は現実的ではありません。

于 2013-10-21T06:09:37.237 に答える