概要 各言語がC10K問題をどう解決してきたかを調べてみたところ、Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別がよく分からなかったので調べてみました。 正直なところ人によってちょこちょこ定義が異なるのではっきりとした答えはなさそうですが、自分で調べてしっくりした形をまとめます。 前提 同期と非同期の違い 用語 説明 同期 OSにタスクを投げて、入出力の準備ができたら アプリケーションに処理が返ってくる 非同期 OSにタスクを投げて、入出力が完了したら通知をもらう ブロッキングとノンブロッキングの違い 用語 説明 ブロッキング OSへ依頼したタスクが完了するまで待つ ノンブロッキング OSへ依頼したタスクの完了を待たない Blocking I/O ref: java Selector is asynchronous or no
![Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別 - Carpe Diem](https://cdn-ak-scissors.b.st-hatena.com/image/square/985d0ed1ee171eb4e66f3a5c03f0bad81af6ae4b/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fq%2Fquoll00%2F20170628%2F20170628133720.png)