最近ノンブロッキングI/Oを使ったサーバが注目を浴びている。(古い?) JavascriptならNode.js、PythonならTwisted、RubyならEventMachine、JavaならPlay!フレームワークなんかを使うと簡単に実装できるようだ。 なのでちょっと調べてみた。 そもそもノンブロッキングI/Oって何? データの入出力において、データの送受信の完了を待たずに他の処理を開始する方式。 並列処理の一種。 つまりI/Oの処理に関しては丸投げしといて、他の処理をして、あとでI/Oの処理が終わったか見に行くような仕組み? ブロッキングI/Oの場合はI/Oの処理中は、他の処理を停止する。 なんでノンブロッキングI/Oを使ったサーバが必要なの? 従来のサーバは、アクセス毎にスレッドを生成して処理をしていた。 そのためアクセス数が増えるとスレッド生成により大量にメモリーを消費してしまう