トップ回答者
ファイルの非同期I/Oについて教えてください。

質問
回答
-
こういうのは「やってみなければわからない」というのが答えになります。
だれも正確なことはわかりません。
場合によっては「シングルスレッド」で素直に書いたものが
一番早いという結果になったりします。というのも、最近のHDDは
大量のバッファを持っているのが原因の一つと思われます。つまり、
>シングルスレッドでやると、データ吐き出しが終るまで処理がストップしてしまいますので、
が、ストップしないで、わりとすぐに戻ってきてしまうわけですね。
この場合、データバッファを2つ持っていること自体も合理性が怪しくなってしまいます。
「データ処理スレッド」と「ファイル書き出しスレッド」にすればよかった
・・・なんてオチになったりします。
まぁ、いままでDisk上のファイルの非同期で「良かった」ことが一度も無いので、
これはまったくお勧めしません。扱いがデリケートな割りに少しも効果が感じられない
というのが素直な感想ですね(笑)。- 回答としてマーク Barkmann 2009年4月3日 4:41
すべての返信
-
レスありがとうございます。
説明不足で済みません。
データの処理とディスクへの書き出しは、ピンポン方式で交互に行います。
例えば、データバッファ [A] と [B] があるとしますと、
1: [A] 処理中 [B] 待機
2: [A] データ吐き出し [B] 処理中
3: [A] 処理中 [B] データ吐き出し
4: [A] データ吐き出し [B] 処理中
5: [A] 処理中 [B] データ吐き出し
...
こういった処理を延々と繰り返します。
シングルスレッドでやると、データ吐き出しが終るまで処理がストップしてしまいますので、そこで非同期I/Oでやるのとマルチスレッドでやるのとの効率の違いを知りたいのですが。
まだ説明不足でしょうか…。
うまくできなくて済みません。
よろしくお願いします。 -
こういうのは「やってみなければわからない」というのが答えになります。
だれも正確なことはわかりません。
場合によっては「シングルスレッド」で素直に書いたものが
一番早いという結果になったりします。というのも、最近のHDDは
大量のバッファを持っているのが原因の一つと思われます。つまり、
>シングルスレッドでやると、データ吐き出しが終るまで処理がストップしてしまいますので、
が、ストップしないで、わりとすぐに戻ってきてしまうわけですね。
この場合、データバッファを2つ持っていること自体も合理性が怪しくなってしまいます。
「データ処理スレッド」と「ファイル書き出しスレッド」にすればよかった
・・・なんてオチになったりします。
まぁ、いままでDisk上のファイルの非同期で「良かった」ことが一度も無いので、
これはまったくお勧めしません。扱いがデリケートな割りに少しも効果が感じられない
というのが素直な感想ですね(笑)。- 回答としてマーク Barkmann 2009年4月3日 4:41
-
こんにちは。レスありがとうございます。
こういうのは「やってみなければわからない」というのが答えになります。
だれも正確なことはわかりません。
場合によっては「シングルスレッド」で素直に書いたものが
一番早いという結果になったりします。というのも、最近のHDDは
大量のバッファを持っているのが原因の一つと思われます。やっぱり、やってみないとわからないですか。テストする時間がないため、安易にフォーラムに質問を投稿してしまいました(汗)。
が、ストップしないで、わりとすぐに戻ってきてしまうわけですね。
この場合、データバッファを2つ持っていること自体も合理性が怪しくなってしまいます。
「データ処理スレッド」と「ファイル書き出しスレッド」にすればよかった
・・・なんてオチになったりします。実はデータがDMAで勝手に流れてくるようになっていまして、本当は3つ以上のバッファで構成されます。
マルチスレッドでやるのが、やっぱり良いみたいですね。まぁ、いままでDisk上のファイルの非同期で「良かった」ことが一度も無いので、
これはまったくお勧めしません。扱いがデリケートな割りに少しも効果が感じられない
というのが素直な感想ですね(笑)。経験された方の意見は大変参考になります。OPERLAPPED I/Oは面倒なわりに、期待した効果が得られないということですね(苦笑)。
ありがとうございました。