一个线程中去执行任务
要想在线程运行过程中,能接收并执行新的任务,就需要采用事件(任务)循环机制 不停的循环接受事件(任务),接受后处理事件(任务)
渲染主线程会频繁接收到来自于 IO 线程的一些任务,比如鼠标点击,资源加载完成等
使用消息队列存放要执行的任务,IO 线程中产生的新任务添加进消息队列尾部
事件循环从队列头部取出任务
渲染进程专门有一个 IO 线程用来接收其他进程传进来的消息
输入事件(鼠标滚动、点击、移动)、微任务、文件读写、WebSocket、JavaScript 定时器等等。 JavaScript 执行、解析 DOM、样式计算、布局计算、CSS 动画等。
第一个问题是如何处理高优先级的任务。
通常我们把消息队列中的任务称为宏任务,每个宏任务中都包含了一个微任务队列
执行宏任务的过程中,如果 DOM 有变化,那么就会将该变化添加到微任务列表中,宏任务中的主要功能都直接完成之后,执行当前宏任务中的微任务
微任务常用的就是 promise