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

來源:互聯網
上載者:User

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

我類比一個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() < startTime + milliSeconds);
  }
  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)來實現並行操作,我們應該要充分利用這一點 —— 儘可能的避免阻塞操作,取而代之,多使用非阻塞操作。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.