ホームページ  >  記事  >  Java  >  JavaをサポートするNIOとNodeJSの基盤テクノロジーのグラフィカル分析

JavaをサポートするNIOとNodeJSの基盤テクノロジーのグラフィカル分析

黄舟
黄舟オリジナル
2017-03-22 10:49:481724ブラウズ

ご存知のとおり、Java NIO と NIO2 のサポートが Java の最新バージョンに追加されました。同時に、NodeJS テクノロジー スタックの最も賞賛される利点の 1 つは、その高性能 IO です。今日は、これらの技術を支える基盤技術についてお話します。

始める前に尋ねるべき質問は次のとおりです:

なぜ NodeJS と Java NIO2 がもっと早く登場しなかったのですか?

回答: 個人的には、基礎となるサポート技術がまだ成熟していないと思います。

それでは、基盤となるテクノロジーとは何を指すのでしょうか?はい、それがオペレーティング システムのテクノロジーであることは多くの人が推測していると思います。この記事で提案する 2 つの概念、Java NIO2 と NodeJS は例外なくユーザー モード テクノロジまたはアプリケーション層テクノロジであり、これらのアプリケーション層テクノロジは、オペレーティング システムの進歩に伴い、同時に OS 上で実行できます。 プログラミングモデルもより充実しています。これら 2 つのテクノロジーは、オペレーティング システムの進歩によってもたらされる利益を活用するために完全に進化したと言えます。一般に、この利点を享受できる最初のテクノロジは CC++ である必要があります。OS の最新の改良点のほとんどはシステム コールであり、CC++ はこれらのシステム コールを適用するのに最も便利ですが、最も複雑でもあります。同じパフォーマンスを得るには、他のプラットフォームが進化し続け、ユーザーがこれらのボーナスを利用できるようにカプセル化する必要があります。そのプラットフォームの更新が停止すると、そのプラットフォームは衰退します。ユーザーにとって便利なパッケージであればあるほど、より使いやすくなり、より多くの人が使用する可能性があります。多くの人はこれらのプラットフォームに基づいてコードをすぐに書くことができますが、これらのテクノロジの動機と原則をまだ理解していないため、その本質を理解できないことがよくあります。以下で説明する技術は、これら 2 つの技術に関連する基盤技術です。

どのようなOS設計であっても、次の5つのIOモデルは必須です。

  • 1. ブロッキング I/O

  • 2. ノンブロッキング I/O

  • 3. 信号駆動型 I/O (SIGIO) )

  • 5. 非同期 I/O (POSIX aio_ 関数)

  • 1. ブロッキング I/O

  • 図に示すように、この IO モデルの利点は、プログラムが簡単であることです。また、このモデルの欠点の 1 つは、システム コールがユーザーの動的スレッドの実行をブロックするため、CPU 時間が無駄になり、IO 効率が低下することです。

2. ノンブロッキング I/O

図に示すように、この IO モデルの改良点は、IO がノンブロッキングであることですが、長いポーリングが必要となり、CPU クロック サイクルも無駄になります。

3. I/O 多重化 (select、poll、epoll)

図に示すように、この IO モデルは今日の OS が提供する最も安定した IO モデルであり、ほとんどの主流のアプリケーションはこれに基づいています。これらのプラットフォームは、NodeJS などの IO モデルに基づいて構築されていますが、多くの場合、これらのプラットフォームは、AIO を直接サポートするために、このモデルの上にカプセル化の層を追加します。

4. シグナルドリブン I/O (SIGIO)

図に示すように、この IO モデルはモデル 3 と比較してパフォーマンス上の利点がなく、システムサポートが不安定であるため、ほとんど使用されていないことがデータで記録されています。デザイナーによる。

5. 非同期 I/O (POSIX aio_ 関数)

図に示すように、この IO モデルは最も完璧な AIO であり、プログラミング モデルも最も単純ですが、これを実現できる OS はほとんどありません。

Linux

がこの分野での取り組みを進めていることを示すオンライン情報はほとんどありません。OS がこの分野で進歩したとしても、プログラミング

フレームワーク

、プラットフォーム、およびプログラミング モデルをさらに簡素化する必要があるかもしれません。かなりの程度。 このモデルが OS でサポートされることはほとんどありませんが、現在そのような AIO モデルが存在しないというわけではありません。多くのフレームワークがこの領域で作業を実行し、ユーザー モードで AIO をシミュレートしているため、ユーザーはビジネス ロジックにもっと注意を払うことができます。コード。

6. 同期と非同期、ブロッキングと非ブロッキング

同期と非同期は、アプリケーションとカーネル間の対話のためのものです。データが読み取られるまで待ってから返すのは同期ですが、直接返すのは非同期です。ブロッキングと非ブロッキングは、プロセスとスレッドを指します。ブロッキング モードでは、読み取りまたは書き込みスレッドは常に待機します。非ブロッキング モードでは、読み取りまたは書き込みスレッドはすぐに

status

値を返します。

以上がJavaをサポートするNIOとNodeJSの基盤テクノロジーのグラフィカル分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。