1

大きなファイルを読み込む場合、複数のスレッドが同時に実行されている場合、バッファなしで実行すると転送速度が速くなりますか、それとも OS バッファで実行した方が十分に優れていますか?

4

2 に答える 2

2

同時に複数のスレッドで同じファイルを読み取り、1 つのスレッドで読み取り、データを何らかの方法で他のスレッドに送信するべきではありません。つまり、バッファを使用した読み取りは高速になりますが、標準では既にバッファが使用されています (fread または ifstream を使用して読み取る場合、関数 read を直接使用するとバッファがありません)。

標準のバッファはディスク セクタ サイズを認識することに注意してください。これは、read direcly を使用すると、ディスク アクセスが減少することを意味します。

于 2011-04-14T04:36:07.740 に答える
0

これは、アクセス パターンに大きく依存します。最初の例として、サウンドとビデオ スレッドを備えたビデオ プレーヤーを考えてみましょう。どちらも、ほぼ同じ位置で、ファイルのシーケンシャル アクセスを必要とします。ただし、一度読み取られると、データはもう必要ありません。したがって、先読みするが古いデータを保持しないキャッシュが必要です。

2 番目の例として、ファイルベースのテーブルを使用するデータベース アプリケーションを考えてみましょう。複数のスレッドが独立したクエリを実行する場合があります。参照の局所性は、テーブルとインデックスが異なると異なります。

明らかに、例は大きく異なります。一部の人にとっては、アプリケーションがキャッシュを管理する必要があることを示唆しています。あまり; 最善の方法は、何をしようとしているのかを OS に伝えることです。トレードオフを行うには、はるかに優れた立場にあります。ディスクへのすべてのトラフィックを確認し、グローバルな RAM の負荷を把握できます。

このため、メモリ マップト ファイルは、ランダム アクセス方式で複数のスレッドを使用して大きなファイルを読み取る高性能な方法です。これにより、OS は I/O とメモリのバランスをとることができます。

于 2011-04-14T09:00:34.163 に答える