event-loop小结

什么是evnet-loop

Event Loop是一个程序结构,用于等待和发送消息和事件

简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"Event Loop线程"(可以译为"消息线程")。

JavaScript 是一门单线程语言,

同一时间只能做一件事情

原因:为了避免DOM渲染冲突, js有修改dom的权力,浏览器也需要渲染dom,js也需要修改dom 多行js之间不能同时执行会导致渲染dom的冲突 js和浏览器也不能同时执行**

解决方案(异步)

通俗的说法是异步,其实实现方式是event-loop(事件轮询);同步代码,直接执行;异步函数先放在异步函数的的队列中(先把函数挪到一个地方取,先不管它)待同步函数执行完毕,轮询执行异步队列的函数

案例1
// 异步函数不能够直接执行了,先放在异步队列中
setTimeout(function(){
  console.log(100)
})
// 同步直接执行
console.log(200)
//主进程
console.log(200)
//异步队列
function(){
  console.log(100)
}

// 异步函数把function(){console.log(100)}放入异步函数的队列中
//console.log(200); // 200
//执行完之后打印出200 ,事件轮询查看异步队列中是否有函数;
//把这个函数立刻放到主线程中function(){console.log(100)}
//然后再执行
复制代码
案例2
//js引擎会一直轮询的监视异步队列中有没有函数
//100ms之后被放入function(){console.log(1)}
//立刻被执行
setTimeout(function(){
  console.log(1)
}, 100)

setTimeout(function(){
  console.log(2)
})
console.log(3)


//主进程
console.log(3)
//异步队列
function(){
  console.log(2)
}
// 100ms之后执行
function(){
  console.log(1)
}
复制代码

总结

  • 事件轮询,JS实现异步的具体解决方案
  • 同步代码,直接执行
  • 异步函数先放在异步队列中
  • 待同步流函数执行完毕,轮询执行异步队列的函数

转载于:https://juejin.im/post/5b8b9dc4e51d45389f54f4e5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值