自己紹介

太田一樹。
東京の大学の情報科学科に通う大学生。moratorium満喫中。

お勧め書籍 [全部見る]

飾り

Search


Category Archives

Recent Entries

  1. 論文
  2. JJUG CCCでプレゼンします
  3. kzk's bookshelf
  4. En Google by Gulfweed
  5. PNUTS
  6. コメントスパム対策
  7. Hadoop + Luceneで分散インデクシング
  8. Hadoopの解析資料
  9. Cluster 2008
  10. SWoPP 2008

2006年11月29日

Asyncronous I/O

ソース。

AsyncIOについて(その1)
AsyncIOについて(その2)

またあちこちのBlogを見る限りNonBlockingI/OやNonBlockingI/O+シグナルとAIOが混同されている気がしたので,それら整理してみたい.

大体以下のような理解でいいのでしょうかね。もしかしたらきっちりした定義が有るのかもしれませんが。

(1) Blocking I/O

普通にopen or socketで作成したfdでwrite, read等を呼んだ場合に発生するI/O。system callが終了したら読み込み or 書き込みが終了する。

(2) Nonblocking I/O

上記のfdにfcntlでO_NONBLOCKオプションを指定してから、write, read等を呼んだ場合に発生するI/O。読み込み or 書き込み可能判定はerrno == EAGAINが返ってこなくなるまでビジーループを回したりする。その間sched_yieldで他のスレッドに処理を回したりすれば美味しい。

上のブログに書いてあるシグナルとの併用というのは見た事が無いのだが具体的にどのプログラムで使われているのだろう。

(3) Asynchronous I/O

一口にAIOと言っても、LinuxでAsynchronous I/Oをやろうとした場合、System Callの系統が2種類あるような。

- POSIX Asynchronous I/O for Linux

POSIX互換のAPI。aio_*のprefixが付いている関数。ヘッダはaio.h。

- Kernel Asynchronous I/O (AIO) Support for Linux

こっちはLinux固有のAPI。io_*のprefixが付いている関数。ヘッダはlinux/aio.h。


整理するとこんな感じ。結局Linux固有に実装しようというAPIとPOSIXで定義されたAPIが有るのも混乱の一因なのかな。OS固有に実装して性能をで引き上げるというアプローチは嫌いじゃないので、一旦頭の中で整理できれば許せる。

しかしまだしっくり来ないのは、Blocking <-> Nonblockingが相反する概念で、Asynchronous <-> Synchronousが相反する概念だよねぇ。BlockingはSynchronousと言えるからNonblockingがAsynchronousとも言えるのかなぁ。なんかその辺の混乱で誤用が多い気がしてならない。

にしてもid:yamazさんの日記はおもろいなー。ウォッチウォッチ。


trackbacks

trackbackURL:

『Asyncronous I/O』の関連記事

comments

comment form
comment form