ノンブロッキングI/Oについて調べてみました*1。ノンブロッキングI/OはSQLの「SELECT ... FOR UPDATE NOWAIT」のイメージに近いのかなと思いました。通常は待つケースで待たずにエラーが返ってきて、アプリケーション側でエラーハンドリングしてリトライするといった使い方になるようですね。 ポイントは以下の点だと思います。 通常、ノンブロッキングI/OはネットワークI/Oに使い、ディスクI/Oには使わない。 open()にO_NONBLOCKフラグを渡したり、 ioctl(fd, FIONBIO, 1)でノンブロッキングモードにすることができる。 ノンブロッキングモードでは通常はブロックされるケースで、ブロックされずにerrnoにEAGAINが設定されて返ってくる。 シングルスレッドで複数の接続を処理できるのでC10K問題を回避できる。 膨大な接続があるが、常に全ての接