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

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

一年之计在于春,祝正在找新工做的大家,offer拿到手软,money多多~ 下面👇就让咱们开始阅读吧。前端

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

本文做者:hmj不是黄焖鸡java


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

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

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

单进程架构的浏览器

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

  • 不稳定

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

  • 不流畅

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

  • 不安全

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

多进程架构的浏览器

Chrome的官方文档markdown

采用多进程能够使浏览器具有更好的容错性,提供安全性和沙盒性。由于操做系统能够提供方法限制每一个进程拥有的能力,因此浏览器可让某些进程只能具有特定的功能,例如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等都已是服务化,这样这些功能既能够放在不一样的进程里面运行也能够合并为一个独立的进程。

相关文章
相关标签/搜索