- - PR -
非同期のI/Oの実装(NetFramework)
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-26 00:11
非同期I/Oの非同期とは、下記a,bどちらの実装がなされているのでしょうか?
(質問はFileStreamを想定しています) a:単にコマンドの終了を待たずに次に進むだけでコマンドの発行順序は考慮されない。 b:コマンドが発行順に待ち行列にキューイングされているため、遅延は発生しても、 コマンドは発行された順序に正確に実行されることが期待できる。 例えば(Open→BeginWrite/BeginRead/BeginWrite/BeginRead→Close)を 何回もくり返すような場合 aの実装ではプログラム側で、前の操作が完了しているかどうかを いちいちチェックしなければならなくなります。 bの実装では気にする必要は無いことになると思います。 | ||||||||
|
投稿日時: 2003-07-27 11:46
こんにちは、meiです。
ヘルプより引用 >複数の非同期要求を同時に実行した場合、要求の完了順序は不定です。 と、あるのでaではないかと思います。 ところで、非同期IOを使用する用途は、 インタフェース部分のレスポンスとため、 ファイルアクセスをバックグラウンドで走らせたいということでしょうか? もし、そうなら専用でThreadを作った方が良い気がします。 | ||||||||
|
投稿日時: 2003-07-28 00:31
計測データを集計して毎秒1回同一ファイルに対してログを追加しています。
(Open/Append/Close) 計測プログラムをノンストップで動かしながらエクスプローラでバックアップも したいのでずっとOpenしっ放しにせず一応Appendした後に毎回Closeをすることに しています。しかし、今回はログの書き込み用途で、しかも1秒ごとにきっちり 書き込まれていなくてはならないという精度は要求されていません。パソコンが 暇な時、例えば10秒跡にどさっと書き込まれても一向に構わない内容の仕事な のです。ただ、データの生成量が多いときがあります。(200KB/sec) 確かにスレッドを作成すれば万全ですね。(未だマルチスレッド使った事ないけど) 非同期I/Oに書き換えるだけで効果があるのであればプログラムの変更も少なそう だしありがたいと思っています。 | ||||||||
|
投稿日時: 2003-07-28 02:01
こんばんは、meiです。
私もスレッドはほとんど使ったことがないので、 自信無いですがこんな感じでしょうか?
ちょっと動かした感じは大丈夫そうだけど、果たして・・・ | ||||||||
|
投稿日時: 2003-07-28 08:18
> しています。しかし、今回はログの書き込み用途で、しかも1秒ごとにきっちり
> 書き込まれていなくてはならないという精度は要求されていません。パソコンが 件名とはズレてしまいますが... 計測・制御系のプログラムの場合、マルチスレッドにしたほうが良いですよ。 例えば、シングルスレッドで周期的にデータ収集していても、ウィンドウを握って ぐりぐり移動すると...周期性が保たれなくなります。 少なくとも、ウィンドウ処理と、計測・制御処理(いわゆるワーカー)は分けたほうが良いです。 最初の敷居は高いですが、是非マルチスレッドでご検討ください。 # 要求される精度によって、Windowsでだめな場合がありますけど... |
1