前端之路——文章转载

Nodejs事件轮询详解

2020-05-31  本文已影响0人  dear智子

Nodejs事件轮询详解 https://www.jianshu.com/p/32ab3eb74e3a

setImmediate( ()=>{
  console.log('setImmediate()执行了');
} ) 

setTimeout(()=>{
  console.log('setTimeout()执行了');
} ,0 )

process.nextTick(()=>{
  console.log('process.nextTick()执行了');
} )
//执行结果
process.nextTick()执行了
setTimeout()执行了
setImmediate()执行了

nodejs的事件轮询机制: 借助libuv库来实现的

事件轮询机制主要分为六个阶段:

1.timers 计时器阶段

 负责计时和执行到点的定时器回调函数

2.pending callbacks

 负责某些系统操作(如tcp错误类型)的回调函数,我们不做研究

3.idle ,prepare

 负责准备工作,我们不做研究

4.poll 轮询阶段(轮询队列),分为以下情况

-如果轮询队列不为空,依次同步取出轮询队列中第一个回调执行,知道轮询队列为空或者达到系统最大的限制

-如果轮询队列为空

    --如果之前设置过setImmediate函数
      ---直接进入下一个check阶段

    --如果之前没有设置过setImmediate函数
      ---在当前poll阶段等待
           直到轮询队列添加回调函数,就去第一个情况执行

    --如果定时器到点了,也会去下一个阶段

5.check 查阶段

 执行setImmediate设置的回调函数

6.close callbacks 关闭阶段

 执行close时间回调函数

关于process.nextTick

 process.nextTick能在任意优先阶段先执行 
上一篇下一篇

猜你喜欢

热点阅读