短い答え:あなたがフラッシュディスクに書き込んでいることを考えると、スレッドの数が何らかの大きな違いをもたらすとは思わないでしょう。しかし、それが違いを生み出すならば、私は、複数のスレッドが単一のスレッドより速く、遅くなることはないと期待します。
長い答え:
私は約6年前、あなたが記述1と同様のプログラムを書いた - それは、組み込みのPowerPC Linuxのカードの上に走り、読み/に/ SCSIハードディスクからの複数の同時オーディオファイルを書きましたドライブ。最初はI/Oを実行するスレッドを1つ作成していましたが、これは最高のスループットが得られると思ったからですが、そうではないことが判明しました。
特に、複数のスレッドが同時に読み取り/書き込みを行っていた場合、SCSIレイヤーはすべての異なるスレッドからのすべての保留中の要求を認識し、I/O要求を並べ替えることができました最小化されました。一方、シングルスレッド-IOシナリオでは、SCSI層は単一の「次の」未処理I/O要求のみを知っていたため、最適化を行うことができませんでした。これは多くの場合、ドライブヘッドの余分な移動を意味し、したがってスループットが低下しました。
もちろん、シークが必要なヘッドを搭載したSCSIや回転ドライブは使用していないため、問題はないかもしれませんが、ファイルシステム/ハードウェアレイヤで実行できるその他の最適化があるかもしれません複数の同時I/O要求を認識しています。調べる唯一の本当の方法は、さまざまなモデルを試して結果を測定することです。
私は、ディスクI/Oをスレッドプールに移動することで、ディスクI/OとネットワークI/Oを切り離すことを提案します。次に、I/Oスレッドプールの最大サイズを1からNに変更することができます。また、サイズごとにシステムのパフォーマンスを測定することもできます。そうすれば、コードを複数回書き直す必要なく、特定のハードウェアに最適なものを明確に知ることができます。
CFカードは実際のフラッシュメモリベースですか、それともmicroHDD(Microdrive)ですか? – osgx
実際のフラッシュですが、使用されているコントローラのために、OSによってATAデバイスとして認識されています。 – Nick