Nodejs事件轮询详解

作者: dear智子 | 来源:发表于2020-05-31 12:28 被阅读0次

    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能在任意优先阶段先执行 

    相关文章

      网友评论

        本文标题:Nodejs事件轮询详解

        本文链接:https://www.haomeiwen.com/subject/ayvlzhtx.html