主题
浏览器中的进程和线程
进程和线程的联系
解释
进程是一片数据集合的运行活动,可以理解成一个程序,是资源分配的最小单位
线程是进程内独立执行的一个单元,是程序执行的最小单位
关系特点
- 进程与进程之间完全隔离,互不干扰,一个进程崩溃不会影响其他进程
- 进程与进程之间需要传递某些数据的话,就需要通过
进程通信管道IPC
来传递 - 一个进程中可以并发多个线程,每个线程并行执行不同的任务
- 一个线程的执行错误,会导致进程的崩溃
- 同一进程下的线程之间可以直接通信和共享数据
chrome 的进程
1个浏览器进程
: 负责控制浏览器除标签页外的界面,包括地址栏、书签、前进后退按钮等,以及负责与其他进程的协调工作,同时提供存储功能
1个GPU进程
:负责整个浏览器界面的渲染
1个网络进程
:负责发起和接受网络请求
多个插件进程
:主要是负责插件的运行,因为插件可能崩溃,所以需要通过插件进程来隔离,以保证插件崩溃也不会对浏览器和页面造成影响
多个渲染进程
:负责控制显示tab标签页内的所有内容,核心任务是将HTML、CSS、JS转为用户可以与之交互的网页,排版引擎Blink和JS引擎V8都是运行在该进程中,默认情况下Chrome会为每个Tab标签页创建一个渲染进程
渲染进程中的线程
GUI渲染线程
:负责渲染页面,解析html和CSS、构建DOM树、CSSOM树、渲染树、和绘制页面,重绘重排也是在该线程执行
JS引擎线程
:一个tab页中只有一个JS引擎线程(单线程),负责解析和执行JS。它GUI渲染进程不能同时执行,只能一个一个来,如果JS执行过长就会导致阻塞掉帧
计时器线程
:指setInterval和setTimeout,因为JS引擎是单线程的,所以如果处于阻塞状态,那么计时器就会不准了,所以需要单独的线程来负责计时器工作
异步http请求线程
: XMLHttpRequest连接后浏览器开的一个线程,比如请求有回调函数,异步线程就会将回调函数加入事件队列,等待JS引擎空闲执行
事件触发线程
:主要用来控制事件循环,比如JS执行遇到计时器,AJAX异步请求等,就会将对应任务添加到事件触发线程中,在对应事件符合触发条件触发时,就把事件添加到待处理队列的队尾,等JS引擎处理