ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejsはjsですか?

Nodejsはjsですか?

青灯夜游
青灯夜游オリジナル
2021-11-01 15:34:163096ブラウズ

Nodejs は js ではなく、サーバー上で js を実行できるようにするプラットフォームです。 js (正式名称 JavaScript) はプログラミング言語であり、Node は Chrome V8 エンジンをベースとした JavaScript 実行環境であり、サーバー上で JavaScript を実行できる開発プラットフォームです。

Nodejsはjsですか?

#このチュートリアルの動作環境: Windows7 システム、nodejs バージョン 12.19.0、DELL G3 コンピューター。

Nodejs は js ではなく、サーバー上で js を実行できるようにするプラットフォームです。

Node.js は、2009 年 5 月にリリースされ、Ryan Dahl によって開発されました。これは、Chrome V8 エンジンに基づく JavaScript 実行環境です。イベント駆動型のノンブロッキング I/O モデルを使用して、JavaScript を許可します。 JavaScript を PHP、Python、Perl、Ruby などのサーバーサイド言語と同等のスクリプト言語にするサーバーサイド開発プラットフォーム。

JavaScript は、Node.js テクノロジに基づいてサーバー側プログラミングを実行できます。

Node.js の機能

ノンブロッキング非同期 io

たとえば、次のような場合です。アクセス中 データベースがデータを取得する際には時間がかかります。従来のシングルスレッド処理メカニズムでは、データベースにアクセスするコードを実行した後、スレッド全体が一時停止し、データベースが結果を返すのを待ってから、後続のコードを実行します。つまり、I/O によってコードの実行がブロックされ、プログラムの実行効率が大幅に低下します。

Node.js ではノンブロッキング I/O メカニズムが使用されているため、データベースにアクセスするコードが実行されると、その背後にあるコードがすぐに実行され、データベースの処理コードが結果を返します。をコールバック関数内に配置することでプログラムの実行効率が向上します。

I/O が完了すると、I/O 操作を実行しているスレッドにイベントの形式で通知が送信され、スレッドはこのイベントのコールバック関数を実行します。非同期 I/O を処理するには、スレッドにイベント ループが必要で、未処理のイベントがあるかどうかを常にチェックし、順番に処理します。

ブロッキング モードでは、1 つのスレッドは 1 つのタスクしか処理できません。スループットを向上させたい場合は、マルチスレッドを使用する必要があります。ノンブロッキング モードでは、スレッドは常に計算操作を実行し、このスレッドの CPU コア使用率は常に 100% になります。したがって、これは特に哲学的な解決策です。多くの人を怠けさせるよりも、一人の人が命を危険にさらして死ぬまで働く方が良いのです。

シングルスレッド

Java、PHP、.net などのサーバーサイド言語では、クライアント接続ごとに新しいスレッドが作成されます。各スレッドには約 2MB のメモリが必要です。つまり、理論上、8GB のメモリを搭載したサーバーに同時に接続できる最大ユーザー数は約 4,000 人です。 Web アプリケーションがより多くのユーザーをサポートするには、サーバーの数を増やす必要があり、Web アプリケーションのハードウェア コストも当然増加します。

Node.js は、クライアント接続ごとに新しいスレッドを作成せず、1 つのスレッドのみを使用します。ユーザーが接続すると、内部イベントがトリガーされ、ノンブロッキング I/O およびイベント駆動メカニズムを通じて、Node.js プログラムは巨視的に並列処理されます。 Node.js を使用すると、8 GB のメモリを搭載したサーバーで 40,000 を超えるユーザー接続を同時に処理できます。

さらに、シングル スレッドによってもたらされる利点は、オペレーティング システムにスレッドの作成と破棄に伴う時間のオーバーヘッドがなくなることです。ただし、シングル スレッドには多くの欠点もあります。これについては、Node.js の欠点で詳しく説明します。読み続けてください。

イベント駆動型

Node では、クライアントが接続の確立、データの送信、その他の動作を要求すると、対応するイベントがトリガーされます。 Node では、一度に 1 つのイベント コールバック関数のみを実行できますが、イベント コールバック関数の実行中に他のイベントが発生し、代わりに他のイベントを処理することができます (新しいユーザーの接続など)。元のイベントを実行し続けるコールバック関数この処理メカニズムは「イベント ループ」メカニズムと呼ばれます。

Node.js の最下層は C です (V8 も C で書かれています)。基礎となるコードのほぼ半分は、イベント キューとコールバック関数キューの構築に使用されます。イベント駆動型を使用してサーバー タスクのスケジューリングを完了することは、天才だけが思いつくことです。糸を使った針の先の踊りは、多くの仕事をこなす使命を担っています。

Nodejsはjsですか?

Node.js の本質ともいえるイベントループに注目してください 以下、Node.js 公式サイトより引用

  ┌───────────────────────────┐
┌─>│           timers          │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │     pending callbacks     │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │       idle, prepare       │
│  └─────────────┬─────────────┘      ┌───────────────┐
│  ┌─────────────┴─────────────┐      │   incoming:   │
│  │           poll            │<─────┤  connections, │
│  └─────────────┬─────────────┘      │   data, etc.  │
│  ┌─────────────┴─────────────┐      └───────────────┘
│  │           check           │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
└──┤      close callbacks      │
   └───────────────────────────┘

Node 公式 Web サイトからのコンテンツの一部を引用します:

注: 各ボックスはイベント ループの「フェーズ」と呼ばれます。

各ステージには、実行されるコールバック FIFO キューがあります。各ステージは独自の方法で特殊ですが、通常、イベント ループが特定のステージに入ると、そのステージに固有の操作が実行され、キューが使い果たされるまでそのステージのキューでコールバックが実行されます。処刑された。キューが使い果たされるか、コールバック制限に達すると、イベント ループは次のフェーズに移行します。
イベント ループに関しては、これが中心的なポイントです。面接官は、特定の実行出力についてよく質問します。私の記事

クロスプラットフォーム を参照してください。

当初、Node は Linux プラットフォーム上でのみ実行できます。その後、Node の開発に伴い、Microsoft はその存在に気づき、Node が Windows プラットフォームとの互換性を実現できるように支援するチームに投資し、v0.6.0 バージョンがリリースされた時点では、Node はすでに Windows プラットフォーム上で直接実行できるようになっていました。ノードは libuv に基づいたクロスプラットフォームです。

Node.js の欠点

単一スレッドによって引き起こされる欠点

Node.js Oneシングルスレッドはメリットも多いですがデメリットもあり、シングルスレッドの弱点は以下の通りです。

  • マルチコア CPU を利用できません

  • エラーによりアプリケーション全体が終了し、非同期 I/O の呼び出しを続行できなくなります

  • 大量の計算により CPU が占有され、非同期 I/O の呼び出しを継続できなくなる

##アプリケーション シナリオNode.js の概要

Node.js の特徴と欠点を紹介し、次に Node.js の適用シナリオについて説明します。

Node.js はどのようなアプリケーションの開発に適していますか?

I/Oは得意、計算は苦手。 Node.js はタスクのスケジューリングに最適であるため、ビジネスで大量の CPU 計算が行われる場合、実際にはこの計算がこの単一スレッドをブロックすることを意味し、これは Node 開発には適していませんが、解決策がないわけではありません。適切な。

Node.js は、アプリケーションが大量の同時 I/O を処理する必要があり、クライアントに応答を送信する前にアプリケーション内で非常に複雑な処理を実行する必要がない場合に非常に適しています。 Node.js は、Web ソケットを操作して、接続が長いリアルタイムの対話型アプリケーションを開発するのにも非常に適しています。

具体的なシナリオは次のように表現できます:

  • 最初のカテゴリ: ユーザー フォーム収集システム、バックグラウンド管理システム、リアルタイム インタラクション システム、検査システム、ネットワーキングソフトウェア、ハイエンド同時実行 Web アプリケーション;

  • 2 番目のカテゴリ: Web、キャンバスなどに基づくマルチプレイヤー オンライン ゲーム;

  • 3 番目のカテゴリ: Web、キャンバスなどに基づくマルチプレイヤー オンライン ゲームカテゴリ : Web ベースの複数人リアルタイム チャット クライアント、チャット ルーム、グラフィック ライブ ブロードキャスト;

  • 4 番目のカテゴリ: シングルページ ブラウザ アプリケーション;

  • 5 番目のカテゴリ: データベースの操作、フロントエンドおよびモバイル端末向けの JSON ベースの API の提供;

  • 6 番目のカテゴリ、...

どの大企業がそれを使用していますか

  • Yahoo: Yahoo は Cooktail フレームワークをオープンし、YUI3 フロントエンド フレームワークの機能を拡張して、 Nodeの助けを借りてサーバー側。

  • Tencent: ノードを長い接続に適用して、リアルタイム機能を提供します。

  • Huapet.com、Mogujie:socket.io を介したリアルタイム通知。

  • #Alibaba: 主な用途は、効率的な分散を実現するための並列 I/O のパフォーマンスです。また、多くのノード フレームワークも開発しています。
  • LinkedIn : モバイル Web サイトでも Node を使用しています
  • NetEase: ゲーム分野では同時実行性とリアルタイム性に対する高い要件があり、NetEase は Node のリアルタイム フレームワーク pomelo
  • をオープンソース化しました

  • お待ちください...
  • [推奨学習: 「
nodejs チュートリアル

」]

以上がNodejsはjsですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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