Skip to content

浏览器中的进程和线程

进程和线程的联系

解释

进程是一片数据集合的运行活动,可以理解成一个程序,是资源分配的最小单位

线程是进程内独立执行的一个单元,是程序执行的最小单位

关系特点

  • 进程与进程之间完全隔离,互不干扰,一个进程崩溃不会影响其他进程
  • 进程与进程之间需要传递某些数据的话,就需要通过进程通信管道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引擎处理