ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js で真にノンブロッキング関数を記述するにはどうすればよいですか?
Node.js でノンブロッキング関数を記述する正しい方法
ノンブロッキング パラダイムは、Node.js で次のことを達成するために重要です。高いパフォーマンス。ただし、イベント ループの進行を妨げない真のノンブロッキング関数を記述するのは難しい場合があります。
ノンブロッキングの動作を理解する
Promise でのコードのラップ本質的にノンブロッキングにするわけではありません。 Promise executor 関数は同期的に実行されます。つまり、その中の長時間実行コードが他の操作の実行をブロックします。
例: Promise ラップされたブロッキング関数
考慮してください次の関数:
function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { let sum = 0; for (let i = 0; i < 100000; i++) { for (let j = 0; j < val; j++) { sum += i + j % mod; } } resolve(sum); }); }
この関数は Promise を返しますが、コードはexecutor 内でブロックされています。イベント ループは、他の操作を実行する前に、このコードが完了するまで待機します。
setTimeout を使用した非同期性のシミュレーション
この場合、非ブロッキング動作をエミュレートする 1 つのアプローチは、以下を使用することです。 setTimeout:
function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { setTimeout(() => { let sum = 0; for (let i = 0; i < 100000; i++) { for (let j = 0; j < val; j++) { sum += i + j % mod; } } resolve(sum); }, 10); }); }
このコードは、長時間実行ループの実行後に実行するようにスケジュールします。 10ミリ秒の遅延。ただし、遅延実行期間内は依然としてブロックされています。
真のノンブロッキング アプローチ
真にノンブロッキング関数を作成するには、コードを移動する手法を使用する必要があります。メイン Node.js スレッド外での実行:
以上がNode.js で真にノンブロッキング関数を記述するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。