Java の NIO は、非同期 I/O 操作用のノンブロッキング API であり、次のような利点があります。 ノンブロッキング: 同時実行性が向上し、スレッドが I/O 終了を待たずに他のタスクを実行できるようになります。高パフォーマンス: 重複する I/O を使用して、システム リソースの使用率を最大化します。スケーラビリティ: 大規模な同時接続をサポートします。
#Java の NIO
NIO、つまり N on-IOcking Overlapped I/O (ノンブロッキング オーバーラップ I/O) は、Java API の非同期 I/O 操作です。
NIO の仕組み
従来の I/O 操作はブロックされており、データの準備ができる前にスレッドが実行を一時停止します。 NIO はノンブロッキング方式を採用しており、スレッドは I/O 操作の完了を待たずに他のタスクを実行し続けることができます。 データの準備ができたら、NIO はイベント通知メカニズムを通じてスレッドに通知します。スレッドは、データの準備ができたときに呼び出されるコールバック関数を登録できます。NIO の利点
NIO の使用法
NIO を使用するには、複数のチャネルの監視を担当するSelector オブジェクトを作成する必要があります(例: ソケットまたはファイルチャネル)。チャネルは、読み取りや書き込みなどの特定のイベントに関心を持つように登録できます。
イベントが発生すると、セレクターはSelectionKey オブジェクトを通じてプログラムに通知します。 SelectionKey には、イベント タイプと関連チャネルに関する情報が含まれています。
NIO の例
次は、NIO を使用してサーバー上のクライアント リクエストを処理するコード例です。<code class="java">import java.nio.channels.ServerSocketChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.Set; public class EchoServer { public static void main(String[] args) throws Exception { ServerSocketChannel serverChannel = ServerSocketChannel.open(); Selector selector = Selector.open(); serverChannel.configureBlocking(false); serverChannel.register(selector, SelectionKey.OP_ACCEPT); while (true) { selector.select(); Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> iterator = selectedKeys.iterator(); while (iterator.hasNext()) { SelectionKey key = iterator.next(); if (key.isAcceptable()) { SocketChannel clientChannel = serverChannel.accept(); clientChannel.configureBlocking(false); clientChannel.register(selector, SelectionKey.OP_READ); } else if (key.isReadable()) { // 处理客户端请求... } iterator.remove(); } } } }</code>
以上がJava で nio は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。