Node.js は、Chrome の V8 JavaScript エンジン上に構築された強力で人気のある JavaScript ランタイムです。
1) イベント駆動型アーキテクチャ:
Node.js はイベント駆動型のノンブロッキング I/O モデルを使用します
ブロック操作:
プログラムの実行は停止するか、操作が完了するまで待機します。この間、システムまたはスレッドは他のタスクに使用できません。
ブロッキング操作は、完了するまで後続のコードの実行を停止するため、通常は同期的です
同期:
プログラムは操作が完了するのを待ってから、次のタスクに進みます。
元。 Node.js でファイルを同期的に読み取る:
ノンブロッキング操作:
プログラムは操作が完了するのを待ちません。代わりに、操作がバックグラウンドで継続されている間、他のタスクが続行されます。
非同期:
プログラムは、操作が完了するのを待機している間に他のタスクを実行できます。より複雑で、非同期結果を処理するメカニズムが必要です (例: コールバック、Promise、async/await)。
イベントループ
イベント ループは、非同期操作のコールバックの管理と実行を担当します。
2) 非同期およびノンブロッキング:
イベント ループは、非同期操作の実行を管理および調整する Node.js のコア コンポーネントです。
コールスタック:
呼び出しスタックは、現在実行されている関数を追跡します。関数の呼び出し時に追加され、完了時に関数が削除されるスタック データ構造です。
コールバックキュー:
このキューは、完了して実行を待機している非同期操作 (I/O 操作、タイマー、ネットワーク リクエストなど) のコールバックを保持します。
イベントキュー:
コールバック キューと同様に、これはイベントとそれに関連するコールバックを保持します。イベントとは、ユーザーの操作、タイマーの期限切れ、ネットワークの応答などです。
マイクロタスク キュー (または次のティック キュー):
このキューはマイクロタスクを保持します。マイクロタスクは通常、Promise とその .then() コールバックです。マイクロタスクはコールバックよりも優先度が高く、イベント キューより前に処理されます。
タイマー:
イベント ループは、setTimeout() と setInterval() を使用してタイマーを管理します。これらは、指定された遅延の後、または一定の間隔で実行されるようにスケジュールされています。
I/O 操作:
イベント ループは、ファイルの読み取り、ネットワーク リクエスト、データベース クエリなどの I/O 操作を処理します。これにより、Node.js はメインスレッドをブロックせずにこれらの操作を非同期に処理できるようになります。
const fs = require('fs'); // Asynchronous file read fs.readFile('file.txt', 'utf8', (err, data) => { console.log('File read complete:', data); }); // Synchronous operation console.log('This prints first'); // Timer setTimeout(() => { console.log('Timeout executed'); }, 0); console.log('This prints second');
同期コード (console.log('This prints first') および console.log('This prints Second')) は、コール スタックに追加されると最初に実行されます。
fs.readFile コールバックと setTimeout コールバックは、それぞれのキュー (コールバック キューとタイマー キュー) に追加されます。
同期コードの実行後、イベント ループはタイマー キューを処理し、setTimeout コールバックを実行します。次に、コールバック キューを処理し、fs.readFile コールバックを実行します。
const fs = require('fs'); // Asynchronous file read fs.readFile('file.txt', 'utf8', (err, data) => { console.log('File read complete:', data); }); // Synchronous operation console.log('This prints first'); // Timer setTimeout(() => { console.log('Timeout executed'); }, 0); console.log('This prints second');
コールバックは、引数として別の関数に渡される関数であり、その後、外部関数内で呼び出され、ある種のルーチンまたはアクションを完了します。
var http = require('http'); const server = http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }) server.listen(8080, () => { console.log('Server running at http://127.0.0.1:8080/'); });
非同期操作の最終的な完了 (または失敗) とその結果の値を表すオブジェクト。
function downloadFile(url, callback) { console.log(`Starting to download file from ${url}`); setTimeout(() => { console.log('File downloaded successfully'); callback('File content'); }, 2000); } function processFile(content) { console.log(`Processing file with content: ${content}`); } downloadFile('http://example.com/file', processFile);
常につながりましょう!
この投稿を気に入っていただけた場合は、ソーシャル メディアで私をフォローして、最新情報や洞察を入手することを忘れないでください:
Twitter: マダガネサン
Instagram: マダガネサン
LinkedIn: マダガネサン
以上がNodeJS の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。