Event Loop个人理解

时间:2023-12-09 16:22:49

javascript引擎单线程程序,其执行同步操作会按顺序向下执行,执行异步操作则使用事件循环模型。

js引擎线程遇到异步操作,会将异步操作交给对应的观察者,

异步操作包括:

dom事件 click,mousedown等
定时器 setTimeout,setInterval
IO 网络IO,文件IO,其他IO(localStorage,cookie),IO操作会交给对应的线程池来执行

观察者观察异步操作的状态,在异步操作执行完成,会将对应的异步信息(包括callback等)封装成事件推入事件队列。

js引擎线程会不断的轮询事件队列,按照先进先出的原则读取事件,若有事件,则取出,并执行其callback,执行一次callback的过程称为一次循环(Tick),

执行完成,进入下一次循环(nextTick)。

若事件队列为空,则js引擎执行空循环。

在浏览器中,js引擎与GUI引擎是互斥的,即js引擎会阻塞UI渲染,当js同步持续执行的时候,UI不会更新,会处于卡死状态。