ブロック操作とは何かを見てみましょう
sleep() メソッドをシミュレートして、hello star の印刷を 10 秒間遅らせます。
requestHandlers.js
/start をリクエストすると、印刷までに 10 秒の遅延が発生します。
リクエスト/アップロード時には影響を受けません。
実験してみましょう:
最初のブラウザ ウィンドウのアドレス バーに http://localhost:8888/start と入力します。ただし、まだ開かないでください。
2 番目のブラウザ ウィンドウのアドレス バーに「http://localhost:8888/upload」と入力します。まだ開かないでください。
最初のウィンドウ (「/start」) で Enter キーを押し、すぐに 2 番目のウィンドウ (「/upload」) に切り替えて Enter キーを押します。
注意、何が起こったのか:
/start URL の読み込みには 10 秒かかりましたが、これは予想どおりでした。
/upload URL も 10 秒かかりました。
はい、対応するリクエスト ハンドラーには sleep() と同様の操作がありません。何が問題ですか?
その理由は、start() にブロック操作が含まれていることです。比喩的に言えば、「他のすべての処理作業がブロックされる」ということです。
Node.js はシングルスレッドであり、スレッドを追加せずにタスクを並列処理できます。
イベント ループを介して並列操作が実装されています。これを最大限に活用する必要があります。ブロック操作はできるだけ避け、代わりに非ブロック操作を使用してください。
次のセクションでは、ノンブロッキング操作を実装する方法を紹介します。