浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务( 四 )

宏任务和微任务

  • 哪些属于宏任务?
  • 哪些属于微任务?
  • 事件循环,消息队列与宏任务、微任务之间的关系是什么?
  • 为任务添加和执行流程示意图
哪些属于宏任务?
  • setTimeout
  • setInterval
  • setImmediate
  • requestAnimationFrame
  • I/O
  • UI渲染
哪些属于微任务?
  • Promise
  • MutationObserver
  • process.nextTick
  • queueMicrotask
事件循环,消息队列与宏任务、微任务之间的关系是什么?
  • 宏任务入队消息队列,可以将消息队列理解为宏任务队列
  • 每个宏任务内有一个微任务队列,执行过程中微任务入队当前宏任务的微任务队列
  • 宏任务微任务队列为空时才会执行下一个宏任务
  • 事件循环捕获队列出队的宏任务和微任务并执行
事件循环会不断地处理消息队列出队的任务,而宏任务指的就是入队到消息队列中的任务,每个宏任务都有一个微任务队列,宏任务在执行过程中,如果此时产生微任务,那么会将产生的微任务入队到当前的微任务队列中,在当前宏任务的主要任务完成后,会依次出队并执行微任务队列中的任务,直到当前微任务队列为空才会进行下一个宏任务 。
为任务添加和执行流程示意图假设在执行解析HTML这个宏任务的过程中,产生了Promise和MutationObserver这两个微任务 。
// parse HTML···Promise.resolve();removeChild();微任务队列会如何表现呢?
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 

浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
图片引自:极客时间的《浏览器工作原理与实践》
过程可以拆为以下几步:
  1. 主线程执行JS Promise.resolve(); removeChild();
  2. parseHTML宏任务暂停
  3. Promise和MutationObserver微任务入队到parseHTML宏任务的微任务队列
  4. 微任务1 Promise.resolve()执行
  5. 微任务2 removeChild();执行
  6. 微任务队列为空,parseHTML宏任务继续执行
  7. parseHTML宏任务完成,执行下一个宏任务
浏览器页面循环系统原理图以下所有图均来自极客时间《《浏览器工作原理与实践》- 浏览器中的页面循环系统》,可以帮助理解消息队列,事件循环,宏任务和微任务 。
  • 消息队列和事件循环
  • setTimeout
  • XMLHttpRequest
  • 宏任务
消息队列和事件循环线程的一次执行
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
在线程中引入事件循环
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
渲染进程线程之间发送任务
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 

浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
线程模型:队列 + 循环
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
跨进程发送消息
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
单个任务执行时间过久
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
setTimeout长任务导致定时器被延后执行
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
循环嵌套调用 setTimeout
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
XMLHttpRequest消息循环系统调用栈记录
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
XMLHttpRequest 工作流程图
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
HTTPS 混合内容警告
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
【浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务】 
使用 XMLHttpRequest 混合资源失效
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
宏任务宏任务延时无法保证
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务

文章插图
 
如果文中有不对的地方,欢迎指正和交流~




推荐阅读