Node.js でノンブロッキング関数を適切に実装する方法
Node.js は非同期の性質にもかかわらず、簡単な実装を提供しません。コードをノンブロッキングで実行する方法。例で行ったように、Promise でラップされた関数は同期的に実行され、メイン スレッドをブロックします。
Node.js 実行モデルを理解する
真の非同期言語とは異なり、 Node.js は、シングルスレッドのイベント ループで JavaScript コードを実行します。 Promise executor 関数を含むすべてのコードは、完了するまでメインスレッドをブロックします。したがって、コード内のノンブロッキング動作の期待は誤りです。
実際のノンブロッキング コードの実現
真にノンブロッキング コードを作成するには、以下を採用する必要があります。集中的なタスクをメインスレッドから削除するテクニック:
例: 問題を解決するコード
コード内で非ブロッキング動作を示すには、setTimeout() 関数を組み込みます。ただし、これはコード実行のタイミングを変更するだけであり、ブロック的な性質は変更しません。
function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { setTimeout(() => { // Time-consuming loop resolve(sum) }, 10); }) }
結論
Promise は非同期タスクの処理に役立ちますが、Promise だけでも効果があります。関数をノンブロッキングにしないでください。真のノンブロッキング動作を実現するには、メイン スレッドの外側でコードを実行するための上記の手法を検討してください。 Node.js の実行モデルの制限を理解することで、その非同期機能を効果的に活用するコードを開発できます。
以上がNode.js でノンブロッキング関数を実際に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。