簡単にnodejsサーバーを作成(7):ブロック化operations_node.jsの実装

WBOY
リリース: 2016-05-16 16:25:46
オリジナル
1208 人が閲覧しました

ブロック操作とは何かを見てみましょう

sleep() メソッドをシミュレートして、hello star の印刷を 10 秒間遅らせます。

requestHandlers.js

コードをコピーします コードは次のとおりです:

関数 start() {
console.log("リクエストハンドラー「start」が呼び出されました。");
function sleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime ミリ秒);
}
sleep(10000);
"Hello Start" を返します;
}

関数アップロード() {
console.log("リクエストハンドラー「アップロード」が呼び出されました。");
"こんにちはアップロード" を返します;
}

exports.start = 開始;
exports.upload = アップロード;

/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 はシングルスレッドであり、スレッドを追加せずにタスクを並列処理できます。

イベント ループを介して並列操作が実装されています。これを最大限に活用する必要があります。ブロック操作はできるだけ避け、代わりに非ブロック操作を使用してください。

次のセクションでは、ノンブロッキング操作を実装する方法を紹介します。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート