Node.js コードの実行方法
今回は、Node.js コードの実行原理と、Node.js コードを実行する際の 注意事項 について説明します。以下に実際のケースを示します。
ソフトウェアが正常にダウンロードされてインストールされた後、それは実際にはコンピューターのハードドライブに保存されている単なるマシンコードの集まり、つまり、私たちが見ることができる一連の exe ファイルです。 もちろん、一部のソフトウェアは比較的大きいものです。大量の dll ファイルが含まれている可能性があります。 このソフトウェアを実行するには2つの方法があります: QQ、Feiqiu、Chromeブラウザなどのほとんどのソフトウェアは、ダブルクリックで実行して実行できます。 node.js など、一部のソフトウェアはコマンドラインで実行する必要があります。 ソフトウェアが実行されると、オペレーティング システムは対応するプロセスを作成します。プロセスは生きたソフトウェアであると理解できます。 プロセスとスレッド コンピューターの中核は CPU であり、すべてのコンピューティング タスクを実行します。それは工場のようなもので、常に稼働していると仮定すると、工場の電力は限られており、一度に 1 つの作業場のみが使用できます。言い換えれば、1 つのワークショップが動作し始めると、他のワークショップも動作を停止する必要があります。その背後にある意味は、1 つの CPU は一度に 1 つのタスクしか実行できないということです。プロセスは工場の作業場に似ており、CPU は常に 1 つのプロセスを実行し、他のプロセスは非実行状態になります。ワークショップでは、多くの作業員が協力してタスクを完了することがあります。スレッドはワークショップのワーカーのようなもので、プロセスには複数のスレッドを含めることができます。ワークショップ内のスペースはワーカーによって共有されます。これは、プロセスのメモリ空間が共有され、各スレッドがこれらの共有メモリを使用できることを意味します。ただし、各部屋の広さは異なります。トイレなど、人がいる場合は他の人は入れない場合もあります。これは、スレッドが共有メモリを使用する場合、他のスレッドはそのメモリを使用する前に共有メモリの終了を待つ必要があることを意味します。他人の侵入を防ぐ簡単な方法は、ドアに鍵を追加することです。最初に到着した人はドアに鍵を掛け、鍵を見てドアに並び、鍵が開くのを待ちます。これを相互排他ロックと呼びます。
JavaScript はシングルスレッドなのですか?
JavaScript 言語の主な特徴は、シングルスレッドであることです。つまり、一度に 1 つのことしか実行できません。では、なぜ JavaScript は複数のスレッドを持てないのでしょうか?これにより効率が向上します。 JavaScript は、その目的に応じてシングルスレッドです。ブラウザーのスクリプト言語としての JavaScript の主な目的は、ユーザーと対話して DOM を操作することです。これにより、シングルスレッドのみが可能であることが決まります。そうでない場合は、非常に複雑な同期の問題が発生します。たとえば、JavaScript に同時に 2 つのスレッドがあるとします。1 つのスレッドが特定のDOM ノード にコンテンツを追加し、もう 1 つのスレッドがこのノードを削除するとします。この場合、ブラウザーはどちらのスレッドを使用する必要がありますか?
そのため、複雑さを避けるために、JavaScript は誕生以来シングルスレッドであり、これがこの言語の中心的な機能となっており、今後も変更されることはありません。 JavaScript はシングルスレッドです。マルチスレッドを実現できるワーカーやクラスターなどもありますが、これらは機能が限定されたスレッドを作成するために使用され、依然としてメインスレッドによって制御されます。ネジ付き。 さらに、JavaScript はシングルスレッドですが、Node.js がインスタンスを実行した後はシングルプロセスでマルチスレッドになるという意味ではないことを理解する必要があります。は、V8 エンジンの解析を担当するスレッドです。JavaScript では、一部のスレッドが libuv を担当します。これは、イベント ループとして理解されます。 IOの理解方法: Iは入力、入力:ファイルの読み取り、データのAjaxリクエストの開始などを表しますOは出力、出力を表します:ファイルの書き込みなど
var a = 1;var b = 2;function fn(){}
fs.readFile('./a.js',callback); fs.writeFile('./b.js',callback);
//同步代码var a = 1;//同步代码var b = 2;//异步代码fs.readFile('./a.js',function(err,data){ if(err)throw data; });//同步代码var c = 3;//异步代码setTimeout(function(){ },200);//同步代码console.log(a + b + c);//同步代码function fn(){ console.log('abc'); }//异步代码fs.writeFile('./b.js',myData,function(err){ if(err)throw err; });
時間が近づくと、すべての同期コードが実行され、この時点でメイン スレッドがアイドル状態になり、このイベント ループ スレッドが開始され、どのゲストが登録されているかが確認されます。ウェイターが料理を注文すると、優先順位に従って料理を 1 つずつ揚げ始めます。つまり、ゲストが多く、ゲストごとに要件が異なるため、Node.js コードが実行されます。にはタイマー、ファイルの読み取り、ファイルのフェッチ、ネットワーク リクエストなどのさまざまな非同期コードがあるため、Node.js にはこれらの非同期コードを処理するためのスレッド プールが多数あります。
スレッドプール内の特定のスレッドを担当する非同期実行が完了すると、このイベントの完了と同等になり、このイベントに対応するコールバック関数がメインスレッドの背後でキューイングされます。
メインスレッドで実行される新しいコードがあると、シェフは何かやるべきことがあることがわかるとすぐに作業を開始します。
メインスレッド上で実行されたコールバック関数に対応するコードが新たな非同期コードを生成すると、イベントループに登録されます。
ある瞬間まで、イベント キュー内のすべてのイベントが実行され、スレッド プールはゆっくりと空になります。
node.js は process.exit() を呼び出し、オペレーティング システムは現在の node.js プロセスを破棄します。
基本的には上記の内容を理解するだけで十分です。さらに一歩進んでみましょう:
ネットワーク プログラミングの学習の部分に到達すると、CTRL + C を積極的に使用して現在のコンテナーを変更しない限り、サーバー コンテナーについて理解できることがわかります。 one プロセスは終了します。そうでない場合は、クライアントの接続を待ち続け、対応するルートに従って対応する処理を実行します。
これをどう理解すればよいでしょうか?
jQuery で学んだ API を思い出してみましょう: イベントを監視するには 2 つの方法があります:
1 回限りの監視
無制限の監視
このように理解できます: ほとんどのファイル操作、Ajax など。実際には 1 回行うだけで終わり、2 回目はありません。これらは 1 種類のイベント モデルに相当します。
しかし、ソケットや http などのネットワーク プログラミングが含まれる場合、それは無制限の監視に相当します。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
angularjs での $apply() の使用の詳細な説明
以上がNode.js コードの実行方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









nohup の役割と原理の分析 Unix および Unix 系オペレーティング システムでは、nohup はバックグラウンドでコマンドを実行するためによく使用されるコマンドです。ユーザーが現在のセッションを終了したり、ターミナル ウィンドウを閉じたりしても、コマンドはまだ実行され続けています。この記事では、nohup コマンドの機能と原理を詳しく分析します。 1. nohup の役割: バックグラウンドでのコマンドの実行: nohup コマンドを使用すると、ターミナル セッションを終了するユーザーの影響を受けることなく、長時間実行されるコマンドをバックグラウンドで実行し続けることができます。これは実行する必要があります

Struts フレームワークの原理分析と実践的な調査 JavaWeb 開発で一般的に使用される MVC フレームワークとして、Struts フレームワークは優れた設計パターンとスケーラビリティを備えており、エンタープライズ レベルのアプリケーション開発で広く使用されています。この記事では、Struts フレームワークの原理を分析し、読者がフレームワークをよりよく理解して適用できるように、実際のコード例を使用してそれを検討します。 1. Struts フレームワークの原理の分析 1. MVC アーキテクチャ Struts フレームワークは MVC (Model-View-Con) に基づいています。

MyBatis は、さまざまな Java プロジェクトで広く使用されている人気のある Java 永続層フレームワークです。その中でも、バッチ挿入は、データベース操作のパフォーマンスを効果的に向上させることができる一般的な操作です。この記事では、MyBatis でのバッチ挿入の実装原理を深く調査し、特定のコード例を使用して詳細に分析します。 MyBatis でのバッチ挿入 MyBatis では、通常、バッチ挿入操作は動的 SQL を使用して実装されます。複数の挿入値を含む S を構築することによって

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

Linux システムの RPM (RedHatPackageManager) ツールは、システム ソフトウェア パッケージのインストール、アップグレード、アンインストール、管理を行うための強力なツールです。これは RedHatLinux システムで一般的に使用されるソフトウェア パッケージ管理ツールであり、他の多くの Linux ディストリビューションでも使用されます。 RPM ツールの役割は非常に重要で、システム管理者とユーザーがシステム上のソフトウェア パッケージを簡単に管理できるようになります。 RPM を通じて、ユーザーは新しいソフトウェア パッケージを簡単にインストールし、既存のソフトウェアをアップグレードできます。

MyBatis は優れた永続層フレームワークであり、XML とアノテーションに基づいたデータベース操作をサポートし、シンプルで使いやすく、豊富なプラグイン メカニズムも提供します。その中でも、ページング プラグインは、よく使用されるプラグインの 1 つです。この記事では、MyBatis ページング プラグインの原理を詳しく説明し、具体的なコード例で説明します。 1. ページング プラグインの原理 MyBatis 自体はネイティブ ページング機能を提供しませんが、プラグインを使用してページング クエリを実装できます。ページング プラグインの原理は主に MyBatis を傍受することです

Linuxシステムのchageコマンドは、ユーザーアカウントのパスワード有効期限を変更するコマンドであり、アカウントの最長使用日と最短使用可能日を変更することもできます。このコマンドはユーザー アカウントのセキュリティ管理において非常に重要な役割を果たし、ユーザー パスワードの使用期間を効果的に制御し、システムのセキュリティを強化します。 CHAGE コマンドの使用方法: CHAGE コマンドの基本構文は次のとおりです: chage [オプション] ユーザー名 たとえば、ユーザー「testuser」のパスワードの有効期限を変更するには、次のコマンドを使用できます。

Golang の継承メソッドの基本原理と実装方法 Golang では、継承はオブジェクト指向プログラミングの重要な機能の 1 つです。継承を通じて、親クラスのプロパティとメソッドを使用して、コードの再利用と拡張性を実現できます。この記事では、Golang の継承メソッドの基本原理と実装方法を紹介し、具体的なコード例を示します。継承メソッドの基本原則 Golang では、継承は構造体を埋め込むことによって実装されます。構造が別の構造に埋め込まれている場合、埋め込まれた構造は埋め込まれています。
