setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop (5)

image-20200323094907234

总结

本文从异步基本概念出发一直讲到了浏览器和Node.js的Event Loop,现在我们再来总结一下:

JS所谓的“单线程”只是指主线程只有一个,并不是整个运行环境都是单线程

JS的异步靠底层的多线程实现

不同的异步API对应不同的实现线程

异步线程与主线程通讯靠的是Event Loop

异步线程完成任务后将其放入任务队列

主线程不断轮询任务队列,拿出任务执行

任务队列有宏任务队列和微任务队列的区别

微任务队列的优先级更高,所有微任务处理完后才会处理宏任务

Promise是微任务

Node.js的Event Loop跟浏览器的Event Loop不一样,他是分阶段的

setImmediate和setTimeout(fn, 0)哪个回调先执行,需要看他们本身在哪个阶段注册的,如果在定时器回调或者I/O回调里面,setImmediate肯定先执行。如果在最外层或者setImmediate回调里面,哪个先执行取决于当时机器状况。

process.nextTick不在Event Loop的任何阶段,他是一个特殊API,他会立即执行,然后才会继续执行Event Loop

文章的最后,感谢你花费宝贵的时间阅读本文,如果本文给了你一点点帮助或者启发,请不要吝啬你的赞和GitHub小星星,你的支持是作者持续创作的动力。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppszw.html