Node.js は、非常に人気のあるバックエンド JavaScript 実行環境であり、高パフォーマンスで同時実行性の高いサーバー側アプリケーションを作成するために使用できます。 Node.js には多くの強力な非同期プログラミング機能がありますが、場合によっては、特定のシナリオやニーズには同期プログラミングの方が適している場合があります。
同期プログラミングとは、プログラムの実行が特定の順序で実行されることを意味します。コードの実行はブロックされ、コードは常に特定の操作の完了を待ちます。 IO 操作またはネットワーク要求が発生した場合、プログラムは操作が完了するまで待ってから続行する必要があります。シングルスレッドの Node.js アプリケーションでは、操作がブロックされると、アプリケーション全体のパフォーマンスに影響が出る可能性があります。したがって、Node.js アプリケーションを作成するときは、ブロッキングを避けるために非同期プログラミングが採用されることがよくあります。
非同期プログラミングの主な利点は、プログラムのパフォーマンスとスケーラビリティを向上できることです。非同期コードは並行して実行できるため、複数のリクエストを同時に処理したり、複数のタスクを同時に実行したりして、待機時間やブロックを削減できます。
非同期プログラミングには、マルチスレッド プログラミングによって発生するスレッド同期の問題を回避できるという重要な利点もあります。マルチスレッド プログラミングでは、スレッド間の競合によりスレッド間の同期の問題が発生する可能性があり、プログラムが複雑になり、デバッグが困難になります。 Node.js はシングルスレッドであるため、スレッド間の競合や同期の問題が軽減されます。
ほとんどの場合、非同期プログラミングの方が適していますが、同期プログラミングの方が適しているシナリオもあります。以下に、同期プログラミングに適したシナリオをいくつか示します。
(1) プログラムは複数の操作を順序立てて実行する必要があります。
(2) プログラムは、次のステップを実行する前に、特定の操作が完了するまで待つ必要があります。
(3) プログラムは複数の操作の結果を同期して取得する必要があります。
(4) プログラムは、IO 操作ではなく、大量の計算操作を処理する必要があります。
(5) プログラムはデータとステータスの整合性を保証する必要があります。
このような場合、同期プログラミングを使用すると、コードの理解とデバッグが容易になり、コードの作成の困難さが軽減されます。
Node.js は非同期プログラミングの主な選択肢ですが、実際には Node.js はいくつかの同期プログラミング メカニズムも提供します。以下に、Node.js で同期プログラミングを実装するためのいくつかの方法を示します。
(1) 同期ファイル読み取り
Node.js では、fs.readFileSync() を使用してファイルを同期的に読み取ることができます。ファイルの読み込みが完了する前にプログラムの実行をブロックし、ファイルの読み込みが完了するまで実行を続ける、同期的なファイル読み込みを実現するメソッドです。
以下は、テキスト ファイルを読み取り、ファイルの内容を出力するために使用される単純な Node.js スクリプトです:
const fs = require('fs'); const data = fs.readFileSync('file.txt', 'utf-8'); console.log(data);
上記のコードは、ファイルを同期的に読み取るメソッドを使用しています。ファイルの読み込みが完了し、ファイルの内容が変数データに保存されるまでプログラムが実行されます。次に、プログラムはデータを印刷します。
(2) 同期ブロッキングコードの実行
Node.jsではsetInterval()関数を使用して一定時間間隔で操作を行うことができます。ただし、setInterval() 関数は非同期であり、タイマーを開始して特定の操作を実行します。
Node.js プログラムの実行を一定期間一時停止したい場合は、次のコードを使用できます。
function sleep(ms) { const start = new Date().getTime(); while (new Date().getTime() < start + ms); } console.log('start'); sleep(5000); console.log('end');
上記のコードにより、Node.js プログラムが一時停止されます。 5 秒間実行した後、後続のコードの実行を続行します。このコードは、指定された期間プログラムの実行をブロックするスリープ機能を使用します。
(3) 同期ブロッキング コードの実行 (Promise)
Node.js では、Promise を使用して同期ブロッキング コードの実行を実装することもできます。以下に例を示します。
function sleep(ms) { return new Promise(resolve => { setTimeout(resolve, ms); }); } async function run() { console.log('start'); await sleep(5000); console.log('end'); } run();
上記のコードでは 2 つの関数を使用しています。最初の関数 sleep() は Promise オブジェクトを返し、指定された時間内にsolve() コールバック関数を実行します。 2 番目の関数 run() は、await sleep() 中に Promise オブジェクトの実行が完了するのを待つ非同期関数です。
Node.js は非同期プログラミングの主な選択肢ですが、特定のシナリオやニーズには同期プログラミングの方が適している状況もあります。たとえば、プログラムは複数の操作を順序どおりに実行する必要があるか、または次のステップに進む前に特定の操作の完了を待つ必要があります。 Node.js は、同期ファイル読み取り、同期ブロッキング コード実行、同期ブロッキング コード実行 (Promise) などのいくつかの同期プログラミング メカニズムを提供します。 Node.js アプリケーションを作成する場合、最高のパフォーマンスとスケーラビリティを実現するには、特定のシナリオに基づいて非同期プログラミングまたは同期プログラミングを選択する必要があります。
以上がNodejs は同期を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。