Node.js高级编程【二】核心模块

目录

二、核心模块

21、 Nodejs事件环理解

​22、 Nodejs与浏览器事件环区别

23、Nodejs事件环常见问题 

24、核心模块之stream

25、stream之可读流

26、stream之可写流

27、stream之双工和转换流

28、 文件可读流创建和消费

29、文件可读流事件与应用

30、 文件可写流

31、write执行流程

32、控制写入速度

32、背压机制

33、 模拟文件可读流01

34、链表结构

35、 单向链表实现

36、单向链表实现队列

37、文件可写流实现

38、pipe方法使用

二、核心模块

 21、 Nodejs事件环理解

setTimeout(() => {
    console.log('s1');
    Promise.resolve().then(() => {
        console.log('p1');
    })
    Promise.resolve().then(() => {
        console.log('t1');
    })
});

Promise.resolve().then(() => {
    console.log('p2');
})

console.log('start');

setTimeout(() => {
    console.log('s2');   
    Promise.resolve().then(() => {
        console.log('p3');
    })
    Promise.resolve().then(() => {
        console.log('t2');
    })
});

console.log('end');

// start end p2 s1 p1 t1 s2 p3 t2

Node.js高级编程【二】核心模块_第1张图片 22、 Nodejs与浏览器事件环区别

(1)任务队列数不同

  • 浏览器中只有二个任务队列
  • Nodejs 中有6个事件队列

(2)Nodejs 微任务执行实际不同

  • 二者都会在同步代码执行完毕后执行微任务
  • 浏览器平台下每当一个宏任务执行完毕后就清空微任务
  • Nodejs 平台在事件队列切换时会去清空微任务

(3)微任务优先级不同

  • 浏览器事件环中,微任务存放于事件队列,先进先出
  • Nodejs 中 process.nextTick 先于 promise.then

23、Nodejs事件环常见问题 

(1)setTimeout 和 setImmediate同步执行顺序是随机的

setTimeout(() => {
    console.log('timeout');
});

setImmediate(() => {
    console.log('immediate');
})

// 会出现两种结果
// 第一种
// timeout
// immediate

// 第二种
// immediate
// timeout

Node.js高级编程【二】核心模块_第2张图片

Node.js高级编程【二】核心模块_第3张图片

 

你可能感兴趣的:(Nodejs,node.js,前端,后端)