首页 > 其他 > 详细

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

时间:2019-04-19 21:42:56      阅读:161      评论:0      收藏:0      [点我收藏+]

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

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

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

原文:https://www.cnblogs.com/yrd688/p/10738919.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!