ホームページ  >  記事  >  Java  >  Java NIO のノンブロッキングサーバー

Java NIO のノンブロッキングサーバー

王林
王林転載
2023-08-19 18:49:071294ブラウズ

Java NIO中的非阻塞服务器

ノンブロッキングサーバー

Java NIO (新しい入力/出力) は、Java の標準 IO API の代替として機能する非常に強力なネットワークおよびファイル処理アプリケーションです。JDK 4 の導入以来、より高度な機能が追加されたため、急速に登場しました。多くのエンジニアの間で好まれる I/O システムです。

Java NIO によって提供されるファイル処理およびファイル システム機能のサポートの強化は、Java NIO の差別化機能の 1 つです。 NIO ファイル クラスは非常に強力な機能を備えているため、ファイル処理で広く使用されています。

よく見ると、java.nio パッケージで NIO API で使用されるバッファー クラスが指定されていることがわかります。最も優れている点は、Java プログラマがネイティブ コードを記述せずに高速 I/O を実現できるように作成されたことです。

ブロッキング I/O とノンブロッキング I/O

ノンブロッキング I/O を使用するため、ノンブロッキング サーバーは同じプロセスまたはスレッドを通じて複数のリクエストを同時に処理できます。ブロックのプロセスは、チケット売り場の列に似ていると考えてください。各顧客は、続行する前に、前の人のサービスが提供されるのを待つ必要があります。

対照的に、ノンブロッキング プロセスは、すべての顧客をローテーションして注文に対応することで同時にサービスを提供しようとするレストランのウェイターに似ています。

ブロッキング サーバーは同期的に動作し、各リクエストを完了してから次のリクエストに進みます。これにより、クライアントの待機時間が長くなり、各リクエストを処理するために複数のスレッドが必要となり、CPU の要求が高くなります。一方、ノンブロッキング サーバーは非同期アプローチを採用し、各リクエストの完了に反応して 1 つのスレッドが複数のクエリを同時に処理できるようにします。

Java NIO の機能

Java NIO には、他の IO システムとは異なる独自の機能がいくつかあります。 Java NIO の主な機能は次のとおりです:

  • A同期およびノンブロッキング IO - この機能により、データがバッファに読み込まれている間にスレッドが他のタスクを実行できるようになります。処理が開始される前にデータが完全にロードされるのを待つ代わりに、スレッドは、データの読み取り中も作業を続行できます。

  • バッファ指向のアプローチ - Java NIO は、データに迅速にアクセスして処理できるように、データをバッファに保存します。データが必要になると、バッファから取得されて処理されます。

###アルゴリズム###

  • ステップ 1

    -まず、import ステートメントを使用して必要なクラスをインポートする必要があります。

  • ステップ 2

    -次に、「WriteExample2」という名前のパブリック クラスを作成する必要があります。

    ステップ 3
  • -このクラス内で、文字列型の変数引数を受け入れる public static void main 関数を定義する必要があります。
  • ステップ 4
  • - 次に、Files.createTempFile() メソッドを使用して、「.txt」拡張子を持つ一時ファイルを作成します。書き込みには、 Files.write() を使用できます。メソッドと、文字列「Hello」と「world」を保持する反復可能なオブジェクト。
  • ステップ 5
  • -ファイルの createTempFile() 関数によって返された Path オブジェクトによって定義されたファイルからすべてのバイトを読み取るには、 Files.readAllBytes() 関数を使用できます。 、新しい String() コンストラクターを使用してそれらを String に変換する必要があります。
  • ステップ 6
  • -最後に、System.out.println() メソッドを使用して文字列をコンソールに出力します。
  • 例 1 この Java コードは、一時テキスト ファイルを作成し、「Hello」と「world」をそれに書き込みます。次に、ファイルを読み取り、その内容を出力します。コードは、Java NIO パッケージの Files クラスを使用してファイル操作を処理します。

    リーリー ###出力### リーリー
  • Java NIO のコンポーネント

Java NIO は、バッファー、チャネル、セレクターという 3 つの基本コンポーネントに基づいて構築されています。ここでは、それぞれの概要を説明します。-

バッファ

- バッファは、ある場所から別の場所にデータを転送する際に、データを一時的に保存するために使用されるメモリのブロックです。 Java NIO では、データの読み取りと書き込みを簡単に行うためにバッファーが使用されます。

  • チャネル

    - Java NIOでは、チャネルはファイルやソケットなどのIO操作を実行できるオブジェクトへの接続を表します。チャネルは、バッファとそれが表すオブジェクトの間でデータを転送する役割を果たします。

  • セレクター

    - セレクターは、I/O 操作を実行する準備ができているかなど、1 つ以上のチャネルのイベントを監視するために使用される Java NIO コンポーネントです。ウェイクアップして、適切なスレッドが操作を処理できるようにすることができます。

  • ノンブロッキングサーバー構成
  • ノンブロッキング サーバーは、ノンブロッキング IO パイプラインで構成されます。これは、読み取りと書き込みの両方の IO 操作をノンブロッキング方式で処理する一連のコンポーネントです。このパイプラインの仕組みについては次のとおりです。-

    • セレクターは、チャネルに読み取るデータがあるかどうかを判断するために、パイプライン内の各コンポーネントによって使用されます。

    • データがある場合、コンポーネントはそれを読み取り、それに基づいて出力を提供します。その後、出力はチャネルに書き戻されます。

    • コンポーネントに基づいて、ノンブロッキング IO パイプはデータの読み取りと書き込みに加え、両方の操作を実行できます。

    • このコンポーネントは、セレクターを介してチャネルからデータを読み取ります。 Java NIO はノンブロッキング IO 操作を管理し、セレクターと選択可能なチャネル選択キーは多重化された IO 操作を定義します。

    • ノンブロッキング IO パイプラインは、ノンブロッキング データ処理と並行して、データを論理的に順序付けされたメッセージまたは組み合わせたメッセージに分割します。これは、Java の StreamTokenizer クラスを使用して、処理前にデータ ストリームをトークン化することに似ています。

    • ノンブロッキング モデルは、InputStream と同様のインターフェイスを使用し、1 バイトのみの読み取りを許可するブロック IO パイプラインとは対照的に、Java NIO セレクターを使用して、読み取るデータがある SelectableChannel インスタンスをチェックしてのみ提供します。

    サーバー読み取り/書き込み操作のブロッキング モデルと非ブロッキング モデルの比較

    サーバー アーキテクチャの世界では、読み取りおよび書き込み操作にブロッキング モデルを使用するかノンブロッキング モデルを使用するかを選択することは、サーバーの効率とスケーラビリティに大きな影響を与える可能性があります。

    ノンブロッキング モデルはブロッキング モデルの逆で、ノンブロッキング I/O 呼び出しをインターリーブすることでプロセスが複数の同時リクエストを処理できるようにします。

    これらのモデルの違いを説明するために、2 つのリクエストを受信する仮想サーバーを考えてみましょう。ブロッキング モデルでは、プロセスはリクエスト B に進む前に、リクエスト A が完全に処理されるまで待つ必要があります。ブロッキング モデルは、リクエスト A と B の処理を​​インターリーブすることで、両方のリクエストを同時に処理できます。

    Java NIO を使用すると、単一のスレッドで複数のチャネルを制御できるようになり、ノンブロッキング I/O がサポートされます。

    バッファと相手側のオブジェクトをリンクするチャネルにより、非同期データ転送が可能になります。SocketChannel と ServerSocketChannel の 2 つのクラスは、Java NIO チャネルを実装し、TCP 接続を介したデータの送受信を可能にします。

    サーバー アーキテクトは、適切な I/O モデルを選択することで、効果的かつスケーラブルで、多数の同時リクエストを管理できるシステムを作成できます。

    ###結論は###

    Java NIO は、ファイル処理およびファイル システム機能のサポートが強化された、強力なネットワークおよびファイル処理アプリケーションを提供します。その非同期およびノンブロッキング I/O、バッファ指向のアプローチ、およびバッファ、チャネル、および 3 つの基本コンポーネントセレクターにより、ユニークな I/O システムになります。

    Java NIO のノンブロッキング サーバー モデルは、ノンブロッキング I/O パイプを使用して複数のリクエストを同時に処理できます。ブロッキング I/O パイプとは異なり、ノンブロッキング モデルは、実際に読み取るデータがある SelectableChannel インスタンスのみをチェックして提供するため、より高速で効率的なシステムになります。

以上がJava NIO のノンブロッキングサーバーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。