8

非常に大きなファイルがあり、各行を処理する必要があります (ファイルの各行は独立しています)。最速の方法でファイルを読み取るために、ゴルーチンを使用するにはどうすればよいですか (または使用しない方がよいでしょうか?)。

4

3 に答える 3

13

ハードディスクがCPUよりも桁違いに遅い限り、これはまだ非常に一般的な状況ですが、CPUサイクルを増やすことで、ファイルの読み取り(ドメイン:単一のHDから)を魔法のように速くすることはできません。(コールドファイルキャッシュおよび/または使用可能なすべてのファイルキャッシュメモリよりもはるかに大きいファイルサイズを想定しています)。

于 2012-10-16T12:46:19.313 に答える
4

ほとんどすべての場合において、CPU サイクルではなくディスク I/O が制限要因であるため、ゴルーチンを使用しても純粋な読み取りスループットの利点は得られません。

代わりに、行を読み取った後、1 ステップ後に並行性を使用できるかどうかを確認する必要があります。行の処理に少しの処理または待機が必要な場合 (おそらく、それを分析するか、別の場所に送信しますか?)、並行性が役立つ場合があります。別の、またはいくつかの他の go ルーチンに渡すことで、この行で読み取りを続行できます。ゴルーチン。

于 2012-10-17T20:04:26.150 に答える
1

また、スループットを最大化するために、メモリページサイズのデータ​​のブロブを読み取ろうとする必要があります(2つのハーフページの読み取りは、1つのフルページの読み取りよりも遅くなります)。ページサイズは、OS/カーネル構成によって異なります。

于 2012-10-19T07:37:15.407 に答える