node事件循环

一、什么是事件循环

首先,node.js的事件循环与JavaScript的略有不同。node中事件循环使node.js可以通过将操作转移到系统内核中来执行非阻塞 I/O操作。由于大多数现代内核都是多线程的,因此它们可以处理在后台执行的多个操作。当这些操作之一完成时,内核会告诉node.js,以便可以适当的回调添加到轮询队列中以最终执行

二、事件循环图解

node.js启动时,它将初始化事件循环,处理提供的输入脚本,这些脚本可能会进行异步API调用,调度计算器,然后开始处理事件循环。

下图显示了事件循环操作顺序的简化概述

三、各阶段概述

timers队列:存放计时器的回调函数

poll轮询队列:除了times、checks,绝大部分回调都会被放入该队列,比如:文件的读取、监听用户请求等;如果poll中有回调,依次执行回调,直到清空队列。如果poll中没有回调,等待其他队列中出现回调,结束该阶段,进入下一阶段,如果其他队列也没有回调,持续等待,直到出现回调为止。

check检查队列:使用setImmediate的回调会直接进入这个队列

nextTick和Promise:事件循环中,每次打算执行一个回调之前,必须清空nexrTick和promise队列

四、大厂面试题

async function async1(){
    console.log("1")
    await async2();
    console.log("2")
}
async function async2(){
    console.log("3")
}
console.log("4")
setTimeout(()=>{
    console.log(5)
},0)
setTimeout(()=>{
    console.log("6")
},3)
setImmediate(()=> console.log("7"))
process.nextTick(()=> console.log("8"))
async1()
new Promise(function(resolve){
    console.log("9")
    resolve()
    console.log("10")
}).then(function(){
    console.log("11")
})
console.log("12")

// 4 1 3 9 10 12 8 

// 2 11

  • 关注我,后面继续发表更多底层知识哦!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值