DOBON.NET DOBON.NETプログラミング掲示板過去ログ

非同期 I/O 完了

  • 題名: 非同期 I/O 完了
  • 著者: 突然ですが
  • 日時: 2004/08/01 19:18:55
  • ID: 5263
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[XP VB.NET]
分類:[.NET]

初めてお世話に成ります。
メールマガジン「.NETプログラミング研究」を参考書にしてスレッドに付いて勉強しています。

MSDNのヘルプに「非同期 I/O 完了」と言うのが有りますが、此れに付いての質問をさせていただきます。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconioasynchronouscompletion.asp

MSDNのサンプルコードはC#で書かれておりVB一本の私には良く理解できません。
短い説明文から推測するに、I/Oを非同期に作動させ完了時にコールバックさせているのでは無いかと考えます。

どぼん!さんの発行されているメールマガジンの第24号「.NETのマルチスレッドプログラミング その6  - 非同期デリゲートの使い方」に、「4.呼び出しが終了したときにコールバックメソッドが実行されるよう にする」という非常に参考になるサンプルが有ります。

上記「非同期 I/O 完了」と「4.呼び出しが終了したときにコールバックメソッドが実行されるようにする」は同じ考え方なのでしょうか?、片方はIO限定ですが。

「I/Oを非同期に作動させコールバックさせる」作動は「非同期ソケット」がそうであり此れと上記二つの違いは何なのでしょう??

宜しくご教授お願いします。
私もMSDNの「非同期 I/O 完了」にあるサンプルをちょっと見てみましたが、FileStream.BeginReadとEndReadメソッドを使ったサンプルらしいということ以外はよく分かりません。

非同期I/O、非同期ソケットと、非同期デリゲートが内部的にどのような違いがあるかは詳しく知りませんが(両者ともスレッドプールを使っており、非同期I/O等でできることなら無理に非同期デリゲートを使うよりも効率的であろうとは思いますが)、使い方は統一されており、ほぼ同じ方法で扱えるということではないでしょうか?
有難う御座います。
「非同期 I/O 完了」とは何なんでしょう???
実は此れを使うとスケーラビリティーが向上するとの記事をどこかで見た記憶があるもので....

Begin*****、は確か非同期呼び出しのはず、ファイルストリームにしてもソケットにしてもそれ自身で非同期作動可能であり、

スレッドAで非同期呼び出し
スレッドBで実行
スレッドBからコールバックを呼び出し
コールバック関数はスレッドBで実行

と作動していると思うのですが、「非同期 I/O 完了」は更にもう一ひねりあるのでは無いかと思いますがよく解りません。

又宜しくお願いします、有難う御座いました。
> 「非同期 I/O 完了」とは何なんでしょう???
> 実は此れを使うとスケーラビリティーが向上するとの記事をどこかで見た記憶があるもので....
>
> Begin*****、は確か非同期呼び出しのはず、ファイルストリームにしてもソケットにしてもそれ自身で非同期作動可能であり、
>
> スレッドAで非同期呼び出し
> スレッドBで実行
> スレッドBからコールバックを呼び出し
> コールバック関数はスレッドBで実行
>
> と作動していると思うのですが、「非同期 I/O 完了」は更にもう一ひねりあるのでは無いかと思いますがよく解りません。

確かにそうでした。大事なところをすっかり忘れていました。

非同期デリゲートの場合は、コールバックメソッドがスレッドプールのスレッドで実行されますが、FileStream.BeginReadではBeginReadメソッドを呼び出したスレッドでコールバックメソッドが実行されます。
  • 題名: Re[4]: 非同期 I/O 完了
  • 著者: 突然ですが
  • 日時: 2004/08/04 1:33:28
  • ID: 5327
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
有難う御座います。
「非同期 I/O 完了」に付いてはもう少し勉強してみます。
又宜しくお願いします

DOBON.NET | プログラミング道 | プログラミング掲示板