浏览器中的异步事件轮询机制

JavaScript 是一门单线程语言,之所以说是单线程,是因为在浏览器中,如果是多线程,并且两个线程同时操作了同一个 Dom 元素,那最后的结果会出现问题。所以,JavaScript 是单线程的,但是如果完全由上至下的一行一行执行代码,假如一个代码块执行了很长的时间,后面必须要等待当前执行完毕,这样的效率是非常低的,所以有了异步的概念,确切的说,JavaScript 的主线程是单线程的,但是也有其他的线程去帮我们实现异步操作,比如定时器线程、事件线程、Ajax 线程。

1.所有的同步任务都在主线程上执行,形成一个执行栈
2.主线程之外,还存在一个`任务队。只要异步任务有了运行结果,就在`任务队列`之中放置一个事件。
3.一旦执行栈中的所有同步任务执行完毕,系统就会读取`任务队列`看看里面有些什么事件,那些对应的异步任务就结束等待状态,进入执行栈,开始执行
4.主线程不断重复上面的第三步,只要主线程空了,就会读取`任务队列`这就是javascript的运行机制,这个过程会不断重复。(该过程又称为事件轮询)
5.在js中的 ES6的任务队列比循环中的任务队列优先级要高,promise则属于ES6的任务队列,所以根据其优先级,系统执行完同步任务之后,最先进入执行栈的是promise,其次才是循环中的任务事件

转载于:https://www.cnblogs.com/yrd688/p/10738919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值