首頁 > web前端 > js教程 > 主體

深入了解Node.js中的非阻塞 I/O

青灯夜游
發布: 2021-07-16 09:35:31
轉載
1743 人瀏覽過

深入了解Node.js中的非阻塞 I/O

說到Node.js,大家大概率聽過一堆讓人頭暈的專有名詞

關於異步,主要是事件循環和**非阻塞I/O,**正式因為這兩點Node.js 才能稱作高效能。

因此搞清楚Node.js 的非同步機制和使用方法是很重要的

Node.js 的非阻塞I/O 是什麼

  • I/O 即Input/Output,一個系統的而輸入和輸出
  • 阻塞I/O 和非阻塞I/O 的區別就在於系統接收輸入再到輸出的時間,能不能接收其他輸入

排隊打飯的例子

深入了解Node.js中的非阻塞 I/O

阻塞I/O 和非阻塞I/O 的區別就在於系統接收輸入到輸出的時間,能不能接收其他輸入

  • #對於顧客/點菜人員來說

    • 排隊打飯是阻塞I/O(後面的顧客必須等待前面顧客的收到後自己才能收到)
    • 餐廳點菜是非阻塞I/O(因為餐廳有很多個服務員,別人點菜的同時,自己也可以點菜)
  • 把食堂阿姨、服務生比作軟體系統

    • 食堂阿姨只能一份份地打飯-> 阻塞I/O
    • 服務生點完菜後還可以服務其他客人-> 非阻塞I/O
  • 輸入= 點菜

  • 輸出= 端菜

#【推薦學習:《nodejs 教學》】

提問等待解決的例子

例如: 一個開發者在論壇上提出了一個問題: "這個Node.js 問題怎麼解決? 在線等,急" .

阻塞I/O 的情況是-> 他一直等待其他人回答,當其他人回答後,他再去做其他的事。

非阻塞I/O 的情況就是-> 他去做其他的事,過一段時間後再回來看答案

做家務的例子

小芳做家務,需要做如下事情:

  • 用洗衣機洗衣服(20 分鐘))
  • 掃地(10 分鐘)
  • 整理書桌(10 分鐘)
  • 晾衣服(10 分鐘)

請設計一個巧妙合理的順序,使小芳花最少的時間完成這些事

  • A:20 分鐘
  • B:25 分鐘
  • C:30 分鐘--因為洗衣機洗衣服時,小芳可以做其他的事✅
  • D :35 分鐘

理解非阻塞I/O

#注意點:

  • 確定系統,輸入,輸出,分別是什麼
  • 在I/O 過程中,能不能進行其他I/O

從程式碼理解阻塞I/O

const glob = require("glob");

var result = null;
console.time("glob");
// 获取目下的文件和文件名
result = glob.sync(__dirname + "/**/*");
console.timeEnd("glob");
console.log(result);
登入後複製

列印出以下結果

深入了解Node.js中的非阻塞 I/O

可以看到,需要花費30 毫秒的等待時間才能拿到結果

從上面的程式碼可以得到,

阻塞I/O 有一個等待時間,在執行過程中不可以執行其他的事情

從程式碼理解非阻塞I/O

const glob = require("glob");

var result = null;
console.time("glob");
// 获取目下的文件和文件名
glob(__dirname + "/**/*", function (err, res) {
  result = res;
  console.log("got result");
});
console.timeEnd("glob");

console.log(1 + 1);
登入後複製

列印出以下結果

glob: 3.198ms
2
got result
登入後複製

從上面的程式碼可以得出,非阻塞I/O 減少了等待時間,在執行過程中也可以執行其他的事情

更多程式相關知識,請造訪:程式設計入門! !

以上是深入了解Node.js中的非阻塞 I/O的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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