概要Nodejs は Chrome ブラウザの V8 エンジンに基づいて構築されているため、そのモデルはブラウザのモデルに似ています。 JavaScript は単一プロセス内の単一スレッドで実行されます。 しかし、V8エンジンのシングルプロセス、シングルスレッド構造は完璧な構造ではありません。昨今のCPUは基本的にマルチコアです。実際のサーバーには複数の CPU が搭載されていることがよくあります (オンラインの物理マシンには 12 個のコアが搭載されているなど)。そのため、Nodejs の実際の適用では、「マルチコア CPU サーバーを最大限に活用するにはどうすればよいか」という疑問が生じます。 厳密に言えば、Node は真のシングルスレッド アーキテクチャではありません。Node 自体に I/O スレッド (ネットワーク I/O、ディスク I/O) があるためです。これらの I/O スレッドは、JavaScript 開発者にとって透過的な低レベルの libuv によって処理されます。 JavaScript コードは常に V8 上で実行され、シングルスレッドです。したがって、表面的には NodeJS はシングルスレッドです。 node.js でマルチコア CPU を最大限に活用する方法シングルプロセスおよびシングルスレッドのマルチコア利用率が低いという問題に直面していますが、これまでの経験によれば、各プロセスは 1 つの CPU を使用してマルチコア CPU の利用を実現できます。 Node は、child_process モジュールを提供し、プロセスのレプリケーションを実装するための fork() メソッドも提供します (プロセスがレプリケーションされる限り、一定のリソースと時間が必要です。Node では、プロセスをレプリケーションするために 10 MB 以上のメモリと 30 ミリ秒以上が必要です)。 このようなソリューションは、*nix システムで最も古典的なマスター ワーカー モードであり、マスター スレーブ モードとも呼ばれます。 典型的な並列処理ビジネス モデルのこの分散アーキテクチャは、優れたスケーラビリティ (スケーラビリティは、実際には並列アルゴリズムおよび並列コンピュータ アーキテクチャと一緒に議論されます。特定のマシン上のアルゴリズムのスケーラビリティは、アルゴリズムが増加する CPU の数を効果的に利用できるかどうかを反映します) と安定性を備えています。 メインプロセスは特定の業務処理を担当するのではなく、作業プロセスのスケジュールと管理を担当します。作業プロセスは特定の業務処理を担当するため、開発者は作業プロセスの安定性に注意を払う必要があります。 fork() によってコピーされたプロセスは独立したプロセスであり、独立した新しい V8 インスタンスを持ちます。 Node は各 CPU コアを使用できるようにプロセスをコピーする fork() を提供していますが、fork() プロセスは非常にコストがかかるということを覚えておくことが重要です。幸いなことに、Node はイベント駆動を通じて単一のスレッドで大規模な同時リクエストを処理できます。 注: ここで複数のプロセスを開始するのは、CPU リソースを最大限に活用するためであり、同時実行の問題を解決するためではありません。 Node で子プロセスを作成する 4 つの方法1. スポーン() コマンドを実行するサブプロセスを作成する 2. 実行() コマンドを実行するための子プロセスを作成します。spawn() との違いは、メソッドのパラメータが異なることです。子プロセスのステータスを取得するためにコールバック関数を渡すことができます。 3. execFile() 指定されたファイルを実行するサブプロセスを開始します。プロセス タイプを指定するには、ファイルの先頭で SHEBANG シンボル (#!) を宣言する必要があることに注意してください。 4. フォーク() spawn() と似ていますが、違いは、Node 子プロセスを作成するために JavaScript ファイル モジュールを実行するだけでよいことです。 注: 次の 3 つのメソッドは、spawn() の拡張アプリケーションです。 上記は、node.js がマルチコア CPU を最大限に活用する方法の詳細です。node.js がマルチコア CPU を最大限に活用する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CentOS プラットフォーム上で LAMP 環境を素早く構築する方法
>>: LinuxベースのApacheウェブサイトサービス構成の詳細な説明
この記事を読む前に、Volumes について予備知識を身に付けておいてください。詳細については、こち...
次に、Centos7 に Java+Tomcat をインストールします。インターネット上には多くの記...
需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...
1. MySQL のインデックスの使用方法インデックスは、特定の列の値を持つ行をすばやく見つけるため...
手ぶれ防止: 繰り返しのクリックによるイベントのトリガーを防止まず、揺れとは何でしょうか? 震えるの...
通常、ユーザーがアップロードした写真はデータベースに保存する必要があります。一般的に、解決策は 2 ...
序文Vuex を使用すると、ストア内に「ゲッター」を定義できます (これはストアの計算されたプロパテ...
この記事では、主に CSS3 フレックス エラスティック ボックスの自動塗りつぶしの書き方について詳...
序文今日 GitHub を閲覧していたところ、SQL を最適化および書き換えるための sora とい...
GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...
序文最近、私の住居の電力事情が不安定で、突然の停電が頻繁に起こります。ノートパソコンを持っているので...
目次1 Dockerをインストールする2 国内ミラーソースの設定3 中国語環境基本版Centos7イ...
最近、IIS をサーバーとして使用すると、apk ファイルがサーバーにアップロードされましたが、ダウ...
目次背景データ型を決定する方法は何ですか? 1. typeof を使用して基本データ型を決定します。...
背景Alibaba Cloud RDS for MySQL(MySQL バージョン 5.7)データベ...