「同期I/O」と「非同期I/O」の定義、とか
指摘を受けたので(あざーっす!)、言葉の整理のためちと調べてみました。
Synchronous I/O OperationとAsynchronous I/O Operationの定義
POSIXによれば、このように定義されています。
3.378 Synchronous I/O Operation
An I/O operation that causes the thread requesting the I/O to be blocked from further use of the processor until that I/O operation completes.
Note:
http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_378
A synchronous I/O operation does not imply synchronized I/O data integrity completion or synchronized I/O file integrity completion.
3.29 Asynchronous I/O Operation
An I/O operation that does not of itself cause the thread requesting the I/O to be blocked from further use of the processor.
This implies that the process and the I/O operation may be running concurrently.
http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_29
ちなみに、W. Richard Stevensの『UNIXネットワークプログラミング 第2版 Vol.1』の、「6 I/Oの多重化: select関数とpoll関数」(p145)のセクションでもこの定義が言及されています。
さて、この定義にのっとると、I/Oモデルはこのように分類できることになり、
- Synchronous I/O Operation (同期I/O操作)
- Asynchronous I/O Operation (非同期I/O操作)
- Asynchronous I/O (非同期I/O)
「Asynchronous I/O Operation」に分類されるのは、Asynchronous I/O (関数名がaio_かlio_で始まるもの)のみとなります。
Synchronous notificationとAsynchronous notification
さて、developerWorksの
のFigure 1を見ると、I/O multiplexingが「Asynchronous」に分類されています。
さきほどの分類とは違いますね。
件の文書を書いた本人ではないのであくまで推測ですが、この図の「Asynchronous」は「Asynchronous I/O Operation」ではなく「Asynchronous notification」なのではないかと思います。
つまり、「XXXが同期/非同期に行われる」を「I/O操作」ではなく「(なにかしらの)通知」を切り口とした分類なのでしょう。それならば、I/O multiplexingが「Asynchronous (notification)」に分類されるのも理解できます。
まとめ
自分で混乱気味だったのでちと整理をしてみました。
はなしはそれますが、Stevensの本、たとえば、
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
- 作者: W.リチャードスティーヴンス,W.Richard Stevens,篠田陽一
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 1999/07
- メディア: 単行本
- 購入: 8人 クリック: 151回
- この商品を含むブログ (35件) を見る
- 作者: W.リチャードスティーヴンス,W.Richard Stevens,橘康雄,井上尚司
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/12
- メディア: 単行本
- 購入: 6人 クリック: 81回
- この商品を含むブログ (41件) を見る
はまちがいなく買いです。前者はネットワークプログラミング、後者はTCP/IPプロトコルについての書籍。
ネットをうろついて断片的な知識を得るよりも、この本を通読したほうがためになると思います。通読しなくても、必要になった折に本の中の関連する周辺トピックを読むだけでもかなり勉強になります。
ちなみに、Stevensのページから、書籍中のソースコードなどがダウンロードできます。
いまさらながらですけど、StevensすごいぉStevens。そんな思いをこめて、天国に向けてはて☆をうかべました。お盆だしね。