事件循环,也叫做消息循环,是浏览器渲染主线程的工作方式
在chrome源码中,会开起一个不会结束的for循环(死循环),每次循环从消息队列中取出第一个任务执行,其他线程可以在合适的时候将任务加入到消息队列末尾
以前把消息队列分为,宏队列和微队列,但是这种说法目前已经无法满足复杂的浏览器环境。取而代之的是一种更加灵活的方式。
根据w3c官方解释,每个任务有不同的类型,同一类型的任务必须在同一个队列,不同的任务可以属于不同的队列。不同的队列有不同的优先级,在一次事件循环中由浏览器觉得取出哪一个队列的任务,但是浏览器必须有一个微队列,这个微队列的任务一定具有最高的优先级,必须优先调度执行
扩展
在chrome浏览器中至少包含了以下队列
从优先级高到底
微队列(用户存放需要最快执行的任务)
交互队列(用户操作后产生的事件处理任务)
延时队列(存放计时器到达后的回调任务)