JavaScript中的事件循环机制是如何实现非阻塞的,并支持长尾任务处理的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1085个文字,预计阅读时间需要5分钟。
目录- 概述原理- 同步微任务宏任务- 案例解析- 能否将promise.then分发给微任务中?- JS单线程,非阻塞,试想如果多线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点
目录
- 概述原理
- 同步>微任务>宏任务
- 案例解析
- 能否先将promise.then分发到微任务中?
js是单线程,非阻塞,试想如果是多线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,为了避免复杂性,从一诞生,JavaScript就是单线程。
js的事件循环分为主线程(同步)和任务队列(异步),任务队列里又分为宏任务和微任务
1.宏任务(macro-task):
script(整体代码),setTimeout,setInterval,setImmediate。
优先级: setImmediate > setTimeout / setInterval
2.微任务(micro-task):
Promise,mutationObserve(观察DOM树结构发生变化时,做出相应处理),process.nextTick(Node.js 环境)。
本文共计1085个文字,预计阅读时间需要5分钟。
目录- 概述原理- 同步微任务宏任务- 案例解析- 能否将promise.then分发给微任务中?- JS单线程,非阻塞,试想如果多线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点
目录
- 概述原理
- 同步>微任务>宏任务
- 案例解析
- 能否先将promise.then分发到微任务中?
js是单线程,非阻塞,试想如果是多线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,为了避免复杂性,从一诞生,JavaScript就是单线程。
js的事件循环分为主线程(同步)和任务队列(异步),任务队列里又分为宏任务和微任务
1.宏任务(macro-task):
script(整体代码),setTimeout,setInterval,setImmediate。
优先级: setImmediate > setTimeout / setInterval
2.微任务(micro-task):
Promise,mutationObserve(观察DOM树结构发生变化时,做出相应处理),process.nextTick(Node.js 环境)。

