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