JavaのIO模型(BIO NIO、AIO)

バイオ

  • 伝統的なIOモデルは、ブロッキング現象は、データの読み取りと書き込みの過程で発生します。ユーザスレッドの問題IO要求は、ときにカーネルがデータの準備ができているかどうかを確認するために行く準備ができてデータを待つ準備ができていない場合は、しかし、スレッドになるユーザーがブロックされ、CPUの上に手にユーザスレッド。データの準備ができると、カーネルはユーザスレッド、スレッドにデータをコピーし、ユーザー、昇降ブロック状態の前に、ユーザスレッドに結果を返します。典型的なブロッキングIOモデルの例としては:データ= socket.read();データの準備ができていない場合、それはリード方法でブロックされているであろう。

NIO

  • JavaのNIOは、実際にIOを多重化します。多重IOモデルでは、そこにあるスレッドはソケットが読み取り専用の複数のソケットの状態をポーリングし、実際のイベントを書き続け、それが本当に実際のIOは、読み取り操作と書き込みを呼び出します
  • IOモデルを多重化するので、唯一の複数のソケットを管理することができますつのスレッドを使用する必要があり、システムは、これらのスレッドやプロセスを維持する必要がない、新しいプロセスやスレッドを作成する必要はありませんし、実際のソケットがイベントを読み込みのみに、IOリソースが使用されるとき、それはかなりの資源の消費を低減します。
  • JavaのNIOにおいて、selector.selectによって()イベントが到達しなければならない場合、各チャネルを照会するために、イベントではない場合、それはそこにブロックされたことがユーザスレッドをブロックにつながる可能性がので、。
  • 大きな体に応答したイベントと、それはイベントの処理中に、後続の遅れにつながる、とイベントが新しい投票に影響を与えます。
    ここに画像を挿入説明

AIO

  • あなたが運転を開始するためのスレッドを読んだ後、非同期IOモデルでは、あなたはすぐに他の事をする開始することができます。一方、カーネルの視点から、それは非同期読み取りに供されるとき、それは読み取り要求が正常に起動されたことを示す、すぐに戻りますが、それは任意のユーザスレッドをブロックすることはありません
  • 単にIO操作が完了したことを示す第1の要求を開始するコアが戻された場合、データ受信成功信号に直接使用することができます。
  • 非同期IOモデルはIOオペレーションの二相がユーザスレッドをブロックしないであろう、と述べ、これら二つの相は、カーネルによって自動的に行われ、その後、ユーザスレッド操作が完了した通知する信号を送信、受信信号は、IO操作が完了したことを示します、あなたは、ユーザーIOスレッド実際の読み取りおよび書き込み操作の関数を呼び出す必要はありません。
公開された20元の記事 ウォンの賞賛0 ビュー256

おすすめ

転載: blog.csdn.net/white_zzZ/article/details/103941538