首頁 > web前端 > js教程 > 輕鬆建立nodejs伺服器(7):阻塞操作的實作_node.js

輕鬆建立nodejs伺服器(7):阻塞操作的實作_node.js

WBOY
發布: 2016-05-16 16:25:46
原創
1222 人瀏覽過

我們來看看什麼是阻塞操作;

我模擬一個sleep()方法來讓hello star延遲10秒列印。

requestHandlers.js

複製程式碼 程式碼如下:

function start() {
  console.log("Request handler 'start' was called.");
  function sleep(milliSeconds) {
 var startTime = new Date().getTime();
 while (new Date().getTime()   }
  sleep(10000);
  return "Hello Start";
}
 
function upload() {
  console.log("Request handler 'upload' was called.");
  return "Hello Upload";
}
 
exports.start = start;
exports.upload = upload;

請求/start的時候,延遲了10秒才列印。

請求/upload的時候,並不會受影響。

接下來做一個試驗:

在第一個瀏覽器視窗的網址列輸入 http://localhost:8888/start,但先不要開啟它!

在第二個瀏覽器視窗的網址列輸入 http://localhost:8888/upload,同樣的,先不要開啟它!

我們在第一個視窗中(“/start”)按下回車,然後快速切換到第二個視窗中(“/upload”)按下回車。

注意,發生了什麼事:

/start URL 載入花了 10 秒,這和我們預期的一樣。

/upload URL 居然也花了 10 秒!

可以它在對應的請求處理程序中並沒有類似 sleep()這樣的操作啊,這是什麼問題?

原因就是start()包含了阻塞操作。形象的說就是「它阻塞了所有其他的處理工作」。

Node.js 是單執行緒的,它可以在不新增額外執行緒的情況下對任務進行並行處理。

它透過事件輪詢(event loop)來實現並行操作,我們應該要充分利用這一點 —— 盡可能的避免阻塞操作,取而代之,多使用非阻塞操作。

下一節我們將介紹如何實現非阻塞操作。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板