この記事では主に Java でのネットワーク IO (BIO、NIO、AIO) の実装に関する関連情報を紹介します。必要な方は参考にしてください。
ネットワーク プログラミング で最もよく知られているのは、Socket for の使用です。ネットワーク通信開発。 Java には主に BIO、NIO、AIO の 3 つの実装方法があります。
これら 3 つの概念の分析は常に理解しているように見えましたが、表現があまり明確ではありませんでした。分析を完全に明確にするための要約を次に示します。
1. BIO メソッド
まず、より一般的な言語で説明します。
BIO は、TCP 接続が確立されるたびに、スレッドを作成する必要があります。接続してメッセージを処理します。途中でブロッキングが発生した場合 (たとえば、接続の確立時、データの読み取り時、またはデータの書き込み時)、同時状況ではスレッドもブロックされます。N 個の接続の処理には N 個のスレッドが必要です。
この方法の欠点は、同時実行条件下では非常に非効率であることです。
以下は BIO の動作状況を説明するための図です
2. NIO メソッド
NIO は JDK1.4 によって提案されました。まず、よく使われる文で NIO の動作原理を説明します。ノンブロッキングIOである
NIOは、イベントドライバー(Reactorスレッドモデル)の考えに基づいています。 BIO と比較すると、NIO は 1 つのスレッドを使用してすべてのソケット チャネルを管理します。これはセレクター メカニズムに基づいており、イベントがクエリされると (接続、接続の受け入れ、読み取り、書き込み)、異なる処理スレッド (ハンドラー) に転送されます。
Reactor モデルの動作アプリケーション図を以下に示します。
3. AIO メソッド
AIO は、JDK1.7 によって提案されており、非同期 IO です。 AIO は Proactor モードを使用します。最初に分析する必要があるのは、AIO と NIO の違いです。
(1) NIO 通知はハンドラーの前に発生します。
(2) AIO 通知は、読み取りや書き込みなどの後に発生するコールバックであり、通知がある場合、関連する操作が終了したことを示します。
AIO が読み取りおよび書き込み操作を実行するときは、対応する読み取り/書き込みメソッドを呼び出して CompletionHandler (アクション完了ハンドラー) に渡すだけで済みます。CompletionHandler はアクションの完了後に呼び出されます。 NIO の通知は、アクションの前に発生し、セレクターがこれらのイベントを検出した後、ハンドラーを呼び出して処理します。
プロアクター モードのワークフロー図を以下に示します。
以上がJava によるネットワーク IO の実装の紹介 (画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。