一个浏览器至少存在3个线程:JS引擎线程(处理JS)、GUI渲染线程(渲染页面)、浏览器事件触发线程(控制交互)。
Javascript引擎线程
是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来然后加以处理,浏览器无论在什么时候都只有一个JS线程在运行JS程序。
GUI渲染线程
负责渲染浏览器界面,当界面需要重绘( Repaint)或由于某种操作引发回流( Reflow)时,该线程就会执行。但需要注意GUI渲染线程与JS引擎是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中,等到JS引擎空闲时立即被执行。
事件触发线程
当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可来自JavaScript引擎当前执行的代码块如setTimeOut,也可来自浏览器内核的其他线程如鼠标点击、Ajax异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。
还没有评论,来说两句吧...