LoginSignup
2

More than 5 years have passed since last update.

BIOとNIOの違いついてのまとめ

Posted at

初めに

前回はBIOとNIO転送路それぞれを作りました、今日はBIOとNIOの違いについてまとめてみます。

通信方式の比較

通信フロー

簡単に言うと、
BIOはI/Oをする際(read,write)に、処理がブロックされること。
NIOはI/Oをする際(read,write)に、処理がブロックされないこと。

通信フローは、以下になります。

BIO:
Untitled Diagram.png


NIO:
Untitled Diagram (1).png

どの処理がブロックされるか

サーバー側に対して、以下のことをやらないといけません:
- step1:クライアントから送られたデータをもらうこと(IO処理がこの段階で発生)
- step2:もらったデータを何か処理を行い、クライアントにリスポンスすること

BIOとNIOに対して、step2の処理がほぼ同じですが、step1の処理が違います。
- BIOのstep1:ブロッキング。1リクエストに対して1threadで処理する。スレッドの上限数がボトルネックになります。
- NIOのstep1:ノンブロッキング。1リクエストに対して1threadで処理するではなくて、Selectorに任せます。そして、Selectorが随時に任されたsocketをチェックします。socketの生成が終わったら、threadに連絡して、step2に移行するという流れです。

まとめ

BIOに比べて、NIOはI/Oリクエストをブロッキングさせないものです。既存のI/O処理(BIO)を改善でき、数万以上のクライアントを同時に相手にする必要があるシステムでは、NIOの方がいいと言われています。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2