LinuxのaioはLinuxカーネル2.6に取り込まれているそうです。
FD_SETとselectで実装するのは多重化IOです。複数のファイル識別子を(fd)いっぺんに監視できるわけですが、非同期ではありません。
複数のfdを同時に監視するには、アプリケーションプログラムでひとつずつ順番にポーリングすりゃいいじゃないかとおっしゃるかもしれません。
もちろんそのとおりです。1000も1万もの多数のfdを同時に監視してかつギリギリの性能を担保しなきゃいけない場面なんて、そうそうないわけですから。
ですが、昨今ではC10K問題で猫も杓子も非同期IOかぶれで、非同期IOかぶれな実装に手を染める必要もあるかもしれません。そんなときに、落とし穴にはまらないためにも情報は仕入れておいたほうが良さそうです。
一方WindowsではNTカーネルに非同期IOが搭載されています。オーバーラップI/Oです。多重化して待つならWaitForMultipleObjectsです。~SingleObjectsもあります。
同期/非同期とブロック/ノンブロックについてのややこしい組み合わせについては、この資料の図が分かりやすい気がしました。(これ経由で知りました)
コメント