ブロッキング操作とは何かを見てみましょう。
Hello Star Printを10秒間遅らせるために、Sleep()方法をシミュレートします。
requesthandlers.js
コードコピーは次のとおりです。
function start(){
console.log( "request handler 'start'が呼び出されました。");
機能スリープ(ミリ秒){
var starttime = new date()。getTime();
while(new date()。getTime()<StartTime + Millionseconds);
}
睡眠(10000);
「hello start」を返します。
}
function upload(){
console.log( "要求ハンドラー 'アップロード'が呼び出されました。");
「hello upload」を返します。
}
exports.start = start;
exports.upload = upload;
リクエスト /開始すると、印刷する前に10秒遅れました。
リクエスト/アップロードすると、影響を受けません。
次に、実験を行います。
http:// localhost:8888/最初のブラウザウィンドウのアドレスバーから開始しますが、最初に開かないでください!
http:// localhost:8888/2番目のブラウザウィンドウのアドレスバーにアップロードします。同様に、最初に開かないでください!
最初のウィンドウ( "/start")でEnterを押し、2番目のウィンドウ( "/upload")にすばやく切り替え、Enterを押します。
注意、何が起こったのか:
/start URLはロードに10秒かかりましたが、これは予想と同じでした。
/アップロードURLは実際には10秒かかりました!
ただし、対応するリクエストハンドラーには、Sleep()に似た操作がありません。何が問題ですか?
その理由は、start()がブロック操作を含むためです。それを鮮明に言えば、「他のすべての処理作業をブロックします。」
node.jsはシングルスレッドであり、スレッドを追加せずにタスクを並行して処理できます。
イベントループを介して並列操作を実装しており、これを最大限に活用する必要があります。代わりに、ブロッキング操作をより頻繁に使用することを可能にします。
次のセクションでは、非ブロッキング操作の実装方法を紹介します。