Chrome浏览器为什么是多进程而不是多线程

前端工程师 @ 字节跳动

豆皮粉儿们,又到了金三银四的求职旺季,今天这一期由字节跳动数据平台的“hmj不是黄焖鸡”,给大家分享前端面试中可能会遇到一个关于浏览器的知识点“Chrome浏览器为什么是多进程而不是单进程”,该文帮大家梳理了知识点内容,让你们能更好的理解~

一年之计在于春,祝正在找新工作的你们,offer拿到手软,money多多~ 下面👇就让我们开始阅读吧。

5c6e7105-97d1-46b5-a71f-5958494f9332.gif

本文作者:hmj不是黄焖鸡


首先需要知道,进程和线程之间的关系是

  1. 进程中的任一线程出错,都可能导致整个进程的崩溃。
  2. 线程之间是会共享进程中的数据。
  3. 进程之间的内容是相互隔离的,如果一个进程崩溃或者挂起了,是不会影响其他进程的。进程间通讯是通过IPC机制。
  4. 当进程关闭后,操作系统会回收进程所占用的内存。

浏览器存在单进程架构、多进程架构

单进程架构的浏览器

所有的功能模块都是运行在同一个进程里的,可能会导致浏览器不稳定、不流畅和不安全。

  • 不稳定

单进程浏览器的功能模块运行在同一进程中,采用多线程的方式运行,如果有一个线程崩溃或者出现问题,就可能会导致整个进程崩溃。例如javascript环境是运行在页面线程中的 ,可能会因为代码的意外崩溃导致整个浏览器崩溃。

  • 不流畅

页面渲染、页面展现、JavaScript环境、插件等都是运行在同一个页面线程中,意味着同一时刻只能有一个任务可以执行。例如编写一个无线循环的脚本运行在单进程浏览器页面中,会独占页面线程,导致其他任务无法执行,会导致整个浏览器失去响应、卡顿。另外页面的内存泄露也是造成卡顿的一个原因。

  • 不安全

插件或者脚本通过浏览器获取系统权限,引发安全问题。

多进程架构的浏览器

Chrome的官方文档

采用多进程可以使浏览器具备更好的容错性,提供安全性和沙盒性。因为操作系统可以提供方法限制每个进程拥有的能力,所以浏览器可以让某些进程只能具备特定的功能,例如Chrome的Tab限制了对系统文件的读写能力, 但是多进程的浏览器有一个缺点,就是进程的内存占用相对更多,但是Chrome为了节省内存,会限制被启动的进程数,当进程数到达界限后,会将访问同一个网站的tab都放在一个进程里运行。

Chrome浏览器有哪些进程呢

  1. 浏览器进程(Browser Process),这个是浏览器的主进程,主要负责包括地址栏、前进后退按钮、处理网络访问、文件访问等。
  2. 渲染进程(Renderer Process),控制显示网站的选项卡内的所有内容。
  3. 插件进程(Plugin Process),控制网站使用的所有插件。
  4. GPU(GPU Process),与其他进程隔离处理GPU任务,由于GPU处理来自多个应用程序的请求并将它们绘制在同一表面上,因此将其分为不同的过程。
  5. 网络进程(NetWork Process),负责页面的网络资源加载,之前是放在浏览器进程中的一个线程运行,现在独立出来。

通过一个老生常谈的面试题简单梳理下浏览器各个进程之间的工作和流程 Chrome浏览器地址栏输入一个URL后发生了什么?

  1. 在输入一个地址的时候,浏览器进程中的UI线程会去解析是搜索内容还是URL。
  2. 当用户确认输入内容,UI线程会将URL转发给网络进程,网络进程会发起网络请求等待响应。
  3. 网络进程接收到响应头数据,解析响应头,并转发给浏览器进程。
  4. 浏览器进程接收到响应头数据后便发送CommitNavigation消息到渲染进程。
  5. 渲染进程开始准备接收HTML数据,通过和网络进程建立数据管道接收数据。
  6. 渲染进程会反馈给浏览器进程“确认提交”,告知浏览器进程已经准备好接收页面数据。
  7. 浏览器进程移除之前的旧文档,更新页面状态。

面向服务化的架构

在Chrome的任务管理器中我们可以看到,Chrome已经在朝着这个方向变化,network service、storage service等都已经是服务化,这样这些功能既可以放在不同的进程里面运行也可以合并为一个独立的进程。

文章分类
前端
文章标签