Skip to main content

如何实现的

计算机结构

计算机结构

  • 底部是机器硬件
  • 中间是操作系统
  • 顶部是应用程序

CPU

CPU

CPU 又称为中央处理器,在过去,CPU 通常是单个核心的,而现在,CPU 通常会有多个核心。

如图,有4个 CPU 核心,每个 CPU 核心,可以想象成一个办公室工作人员,可以逐个处理各种不同的任务。

GPU

GPU

GPU 又称为图形处理器,与 CPU 不同,GPU 擅长同时处理多个核心的简单任务。

最初开发 GPU 是用于处理图形,但它也是为了高度并行计算而设计的。近年来,借助 GPU 加速计算,越来越多的计算任务可以在 GPU 上独立完成。

进程和线程

进程和线程

  • 进程是应用程序的执行程序
  • 线程是位于进程内部并执行进程程序的一部分的执行单元

当用户启动一个应用程序时,会创建一个进程,进程可能会创建线程来帮助执行工作。操作系统为进程分配一块内存空间供其使用,所有应用程序状态都保存在这个私有的内存空间中。直到用户关闭应用程序,进程也会终止,操作系统会释放内存。

一个进程可以要求操作系统启动另一个进程来运行不同的任务,当这种情况发生时,将为新进程分配不同的内存部分。如果两个进程需要进行通信,可以通过进程间通信 IPC 来实现。

浏览器架构

浏览器架构

构建一个浏览器,可以是一个进程,其中包含许多不同的线程;也可以是许多不同的进程,其中包含一些通过进程间通信 IPC 进行通信的线程。

Chrome多进程

Chrome 浏览器是多进程架构,包括Browser Process,Utility Process,GPU Process,Plugin Process,还为每个标签页创建一个 Renderer Process。

可以通右上角的选项菜单->更多工具->任务管理器来查看当前正在运行的进程。

优势

标签页进程

多进程架构有很多优势

  • 每个选项卡由一个独立的渲染器进程 Renderer Process 运行,如果一个标签页无响应,则可以关闭无响应的标签页并继续使用其他标签页,而不会影响其他标签页的运行。如果所有标签页都运行在同一个进程中,那么当一个标签页变得无响应时,所有标签页都会变得无响应。
  • 安全化和沙箱化,由于操作系统提供了限制进程权限的方式,浏览器可以将某些进程与某些功能隔离开来。例如,Chrome 浏览器对于处理任意用户输入的进程限制了对任意文件的访问。

节省内存

节省内存

由于进程具有自己的私有内存空间,它们通常包含了常见的基础设施的副本(比如 V8 引擎),这意味着更多的内存使用,它们无法像在同一进程内的线程那样共享。

为了节省内存,Chrome 浏览器设置了进程个数的限制,这个限制取决于当前设备有多少内存和 CPU 资源。当达到限制时,Chrome 浏览器开始将来自同一站点的多个标签页运行在同一个进程中。

Chrome 浏览器正在进行架构更改,将浏览器程序的每个部分作为一个服务来运行,从而可以轻松地将其拆分成不同的进程或合并为一个进程。在性能强大的设备上运行时,可以将每个服务拆分为不同的进程,以提供更稳定的性能;在资源受限的设备上运行时,可以将服务合并到一个进程中,以节省内存。

一个服务可以在一个独立的进程中运行,也可以与其它服务共享同一个进程。

站点隔离

iframe

进程隔离是分离站点最有效的方法,Chrome 浏览器为每个跨站点 iframe 运行单独的渲染器进程。

启用站点隔离(Site Isolation)是一个多年的工程努力,在包含不同进程的 iframe 上打开开发者工具意味着开发者工具必须在幕后进行一些工作,以使其看起来无缝衔接。即使在页面上运行简单的Ctrl+F查找单词,也意味着跨不同的渲染器进程进行搜索。

参考文章

https://developer.chrome.com/blog/inside-browser-part1/