主要内容:
我们的浏览器是多线程的,js是异步单线程
1,2,3为常驻线程,一直处于待命状态
4,5,6 非常驻线程,有需求才需要
- GUI渲染线程(给浏览器渲染DOM/BOM)
- JS引擎线程(web worker)
- 浏览器事件线程(onclick)
- 定时器触发线程
- http异步线程(Ajax请求,promise等)
- EventLoop(事件循环)处理线程
事件循环:分析图
例题:结果为24573186
同步任务执行时间太长,则这个同步任务后面的异步任务需要在这个同步任务执行完成后才可以加入到队列中,此时如果是定时器,进入到队列的时间需要加入同步任务执行完成的时间,上面的案例,执行到for循环结束时需要33MS,此时1和2 已经放入到宏任务中去了,
3和4在for循环结束后放入,所以3是20MS+33MS,53MS才放入,4是10MS+33MS,43MS放入,也可以直接看上面的分析图