进程和线程

进程就是一个程序运行的实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码运行中的数据一个执行任务的主线程,我们把这样的一个运行环境叫进程。

进程和线程之间的关系有一下4个特点:

  1. 进程中的任意一个线程执行出错,都会导致整个进程崩溃。

  2. 线程之间共享进程中的数据。

  3. 当一个进程关闭之后,操作系统会回收进程所占的内存。

    • 当一个进程退出时,操作系统会回收该进程所申请的所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收。
  4. 进程之间的内容互相隔离。

早期的浏览器为单进程

单进程导致了一系列的问题:不稳定不流畅不安全;插件或者渲染等线程容易崩溃导致整个进程崩溃;内存泄漏导致进程变慢;插件和页面脚本能获取操作系统任意资源。

Chrome架构1_2021-02-22_19-45-36

早期多进程架构

Chrome架构2_2021-02-22_19-48-33

最新的Chrome浏览器

1个浏览器(Browser)主进程、1个GPU进程、1个网络(NetWork)进程、多个渲染进程和多个插件进程。

  • 浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
  • 渲染进程。核心任务时将HTML、CSS、和JavaScript转换为用户可以与之交互的网页,排版引擎Blink和JavaScript引擎V8都是运行在该进程中,默认情况下,Chrome会为每个Tab标签创建一个渲染引擎。出于安全考虑,渲染进程都是运行在沙箱模式下的。
  • 网络进程。主要负责页面的网络资源加载,之前时作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
  • 插件进程。主要时负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。

Chrome架构3_2021-02-22_19-49-39

多进程导致的问题

  1. 资源占用更高。

  2. 更复杂的体系架构。

未来面向服务的架构

为解决多进程导致的问题,Chrome团队正在寻找一种弹性方案,既可以解决资源占用高的问题,也可以解决负责的体系架构问题。

Chrome官方团队使用“面向服务的架构”思想设计了新的Chrome架构。

Chrome架构4_2021-02-22_19-54-32