Node 入门 - (四)Node.js的非阻塞I/O

258 阅读1分钟

阻塞与非阻塞

  • I/O即Input/Output , 一个系统的输入和输出
  • 阻塞I/O和非阻塞I/O的区别就在于 系统接收输入再到输出期间,能不能接收 其他输入。

通俗解释阻塞与非阻塞

  • 阻塞: 当去食堂打饭的时候需要排队等待上一个人打完时下一个才能继续,此时你什么都不能做只能等待

  • 非阻塞: 当选择去餐馆点餐时,点完餐之后,这时你可以做任何事情

  • 系统=食堂阿姨/服务生,输入=点菜,输出=端菜

  • 饭堂阿姨只能一份一份饭地打->阻塞I/O

  • 服务生点完菜之后可以服务其他客人->非阻塞I/O

小芳帮妈妈做家务,需要做:用洗衣机洗衣服(20分钟) 、扫地(10分钟)、整理书桌(10分钟)、晾衣服(5分钟) .你能不能设计一个巧妙合理的新顺序,使小芳最少花()分 钟可以完成这些事?
A.20
B.25
C.30
D.35

答案:选B,因为在你洗衣服的时候你可以同时扫地并整理书桌

代码案例

  • 阻塞
//index.js
const glob = require('glob');

var result = null

console.time('glob')
result = glob.sync(__dirname + '/**/*')
console.timeEnd('glob')
console.log(result)
console.log(1 + 1)

//输出
PS D:\Node\nodejs\io> node index.js
glob: 2.659ms
[ 'D:/Node/nodejs/io/index.js' ]
2
  • 非阻塞
const glob = require('glob');
var result = null
console.time('glob')
glob(__dirname + '/**/*', function(err, res) {
    result = res;
    console.log(result);
})
console.timeEnd('glob')
console.log(1 + 1)

//输出
PS D:\Node\nodejs\io> node index.js
glob: 2.224ms
2
[ 'D:/Node/nodejs/io/index.js' ]

可以看到阻塞情况下会等待结果输出完成后执行后面的代码,而非阻塞会在响应结果的同时去执行打印