C ++での操作に関する非常に基本的File
な質問があります。これが本当にばかげた質問である場合は、ご容赦ください。私のアプリケーションには、次のような関数がありread/write files
ます。プロセスをマルチスレッド化することで、読み取り/書き込み操作を高速化できるかどうか疑問に思いました。CPUのパフォーマンスは向上するかもしれませんが、ハードディスクのパフォーマンスは低下する可能性が
あるため、この疑問があります。。次のような場合があります。1。一度に複数のスレッドによって読み取りまたは書き込みのみが実行され、両方が実行されない場合はどうなりますか?2.ここで1つのファイルのみが考慮されている場合、つまり、複数のスレッドによって同じファイルに対して同時に読み取り/書き込みが実行されている場合はどうなりますか?3. 1つのスレッドのみがファイルを担当するように、複数のファイルが複数のスレッドによって読み取り/書き込みされる場合はどうなりますか?4.読み取りと書き込みが2つの異なるスレッドによって同時に行われる場合はどうなりますか?ありがとうございました
2 に答える
マルチスレッド(および非同期I / O)は、遅延を隠す最適化であり、速度の向上ではありません。複数のスレッドによる単一のファイルへの同時アクセスは、おそらく多くを得ることができません。スレッド化が役立つのは、ファイル操作が完了するのを待っている間に、他に実行したい作業(おそらくユーザーとの対話)がある場合です。これは、操作の1つがブロックされている場所(キーボード/マウスからのユーザー入力を待っている、データまたは接続がネットワークソケットに到着するのを待っているなど)で最も役立ちます。たとえば、1つある場合があります。各ソケットに関連付けられたスレッド。
だからあなたのケース3:
1つのスレッドだけがファイルを担当するように、複数のファイルが複数のスレッドによって読み取り/書き込みされる場合はどうなりますか?
私が追求するのに役立つと思う唯一のものです。そして、ファイル操作の実行中に他に何かする必要があることが確実な場合にのみ。
速度が向上する可能性がありますが、スレッド化には多くのオーバーヘッドが伴います。大量のデータをロードしていることを確認する必要があります。そうしないと、スレッド間通信のオーバーヘッドが発生します。
つまり、さまざまな非同期ファイルioオプションを使用する方がはるかに優れています。それらは主にプラットフォーム固有ですが、boost::asioはそれを抽象化できると信じています...