一、进程的概念:
1、进程是是计算机调度的基本单位;
2、CPU正在进行的一个任务的运行过程的调度单位;
3、浏览器是一个多进程的应用程序;
4、进程包含线程,一个进程存在多个线程,线程是在进程中运行;
二、浏览器进程、线程:
1、浏览器有一个主进程,负责浏览器的主窗口
2、浏览器中的每一个标签都有各自独立的进程:
2-1、渲染进程:浏览器内核Render、渲染引擎;
2-2、网络进程:网络请求;
2-3、GPU进程:动画与3D绘制;
2-4、插件进程:devtool....
3、每个进程里面包含了多个线程(创建线程的目的是为了实现异步的执行)
三、渲染进程,包含的线程:
1、GUI渲染线程(渲染页面):
1-1:解析HTML、CSS;
1-2:构建DOM/render树;
1-3:初始布局与绘制;
1-4:绘制与回流(dom更新)。
2、JS引擎线程:
2-1:一主线程与多个辅助线程配合完成工作流;
2-2:一个浏览器只有一个JS引擎;
2-3:解析JS脚本并运行;
3、GUI线程与JS引擎线程运行互斥:js线程比GUI线程优先级高,只有js线程空闲的清空下,GUI线程才能工作。
4、宏任务与微任务:
4-1、宏任务(macro-task):
script、UI渲染、setTimeOut、setInterval、setImmediate(IE新版本/Edge/NOdeJS)、messageChannel、用户交互事件、Ajax、requestAnimationFrame
4-2:微任务(micro-task):
promise.then、mutationObserver、process.nextTick(NodeJS)
event loop线程:每一次循环都必须清空微任务的队列、二宏任务只会取队列中的一个任务进行处理。
事件一次循环的流程:同步任务——>微任务回调——>GUI渲染——>宏任务回调。