链接:developers.google.com/web/updates…

翻译:疯狂的技术宅

CPU,GPU,内存和多进程架构

在这个由4部分组成的系列文章中,我们将介绍Chrome浏览器从高级架构到渲染管道的具体细节。 如果你想知道浏览器是如何将你的代码转换为功能性网站的,或者你想知道为什么需要使用某些特定技术来提高性能,那么本系列非常适合你。

作为本系列的第1部分,我们将介绍核心计算术语和Chrome的多进程架构。

注意:如果你熟悉CPU / GPU和进程/线程的概念,则可以跳到本文的浏览器体系结构部分。

计算机的核心是CPU和GPU

为了理解浏览器运行的环境,我们需要了解一些计算机部件及其功能。

CPU

首先是中央处理单元(Central Processing Unit)—— CPU。 CPU可以被认为是你计算机的大脑。 CPU核心,在这里作为办公室工作人员,可以在他们进来时逐个处理许多不同的任务。它可以处理从数学到艺术的所有事情,同时知道如何回复客户呼叫。 在过去,大多数CPU都是单芯片。 核心就像生活在同一芯片中的另一个CPU。 在现代硬件中,你通常会获得多个核心,从而为你的手机和笔记本电脑提供更强的计算能力。

图1:4个CPU核心作为办公室工作人员坐在每个办公桌处理任务

GPU

图形处理单元(Graphics Processing Unit )—— GPU是计算机的另一部分。 与CPU不同,GPU擅长处理简单任务,但同时跨多个核心。 顾名思义,它最初是为处理图形而开发的。 这就是为什么在图形环境中“使用GPU”或“GPU支持”与快速渲染和平滑交互相关联。 近年来,随着GPU加速计算,仅在GPU上就可以实现越来越多的计算。

图2:许多带有扳手的GPU核心表明它们可以处理有限的任务

当你在计算机或手机上启动程序时,CPU和GPU用来支持程序的运转。 通常,程序使用操作系统提供的相关机制在CPU和GPU上运行。

图3:三层计算机体系结构。 机器硬件位于底部,操作系统位于中间,应用程序位于顶部。

在进程和线程上执行程序

在深入浏览器架构之前要掌握的另一个概念是Process和Thread。 进程可以描述为运行状态中的程序。 线程是存在于进程内部并用来执行其程序任务的某一部分。

图4:过程划定了边界,线程作为在进程内游动的“抽象鱼”

启动程序时,将会创建一个进程。 该程序可能会创建线程来帮助它工作,但这是可选的。 操作系统为进程提供了一“块”内存,并且所有程序状态都保存在该专用内存空间中。 当你关闭程序时,该进程也会消失,操作系统会释放内存。

图5:进程使用内存空间和存储数据的示意图

进程可以要求操作系统启动另一个进程来执行不同的任务。 当这种情况发生时,将为新进程分配不同的内存。 如果两个进程需要通信,他们可以通过使用进程间通信(IPC)来实现。 许多程序都是以这种方式工作的,因此如果一个工作进程失去响应,则可以重新启动它,而不会停止运行程序的其他进程。

图6:通过IPC进行通信的独立进程示意图

浏览器架构

那么如何使用进程和线程构建Web浏览器? 好吧,它可能是一个具有许多不同线程的进程,或是许多具有少量线程的通过IPC进行通信的不同进程。

图7:不同浏览器体系结构中的进程/线程示意图

在这里有非常重要的一点需要注意,这些不同的架构是实现细节。关于如何构建Web浏览器并没有标准规范。 一种浏览器可能与另一种浏览器的结构完全不同。

在本系列文章中,我们将使用下图中描述的Chrome最新架构。

最重要的部分是浏览器进程怎样与程序的其他工作进程进行协调。 对于渲染器进程,将创建多个进程并将其分配给每个选项卡。 直到不久前,Chrome才为每个标签提供了一个进程;现在它尝试为每个站点提供自己的进程,其中包括iframe(请参阅:站点隔离部分)。

图8:Chrome的多进程架构图。 渲染进程下显示多个图层,表示Chrome为每个选项卡运行多个渲染器进程。

每个进程都做些什么?

下表介绍了每个Chrome进程及其控制的内容:

进程 做些什么
Browser 控制程序的“chrome”部分,包括地址栏,书签,后退和前进按钮。
还处理Web浏览器的不可见的,和特权部分,例如网络请求和文件访问。
Renderer 负责显示网站的选项卡内的所有内容。
Plugin 控制网站使用的所有插件,例如flash。
GPU 独立于其他进程的GPU处理任务。 它被分成多个不同的进程,因为GPU处理来自多个程序的请求并将它们绘制在同一个面中。

图9:指向浏览器UI不同部分的不同进程

还有更多的进程,如扩展进程和功能进程。 如果你想查看Chrome中正在运行的进程数,请点击右上角的选项菜单图标“more_vert”,选择“更多工具”,然后选择“任务管理器”。 这将打开一个窗口,其中包含当前正在运行的进程列表以及它们使用的CPU/内存量。

Chrome中多进程架构的好处

前面我曾提到Chrome使用多个渲染器进程。 在最简单的情况下,你可以想象每个选项卡都有自己的渲染器进程。 假设你打开了3个选项卡,每个选项卡都由独立的渲染器进程运行。 如果一个选项卡没有响应,就可以关闭无响应的选项卡并继续运行,同时保持其他选项卡处于活动状态。 如果所有选项卡都在一个进程上运行,那么当一个选项卡无响应时,所有选项卡都不会响应。 那将会很难受。

图10:显示多进程运行每个选项卡的示意图

将浏览器的工作分成多个进程的另一个好处是安全性和沙盒。由于操作系统提供了限制进程权限的方法,因此浏览器可以从某些功能中对某些进程进行沙箱处理。 例如,Chrome浏览器限制任意用户输入进程的(如渲染器进程)的任意文件访问。

由于进程有自己的私有内存空间,因此它们通常包含公共基础结构的副本(例如V8是Chrome的JavaScript引擎)。 这意味着会消耗更多的内存空间,因为如果它们运行在同一进程内的不同线程上,则无法遵循自己的机制进行共享。 为了节省内存,Chrome限制了它可以启动的进程数量,这种限制因设备的内存和CPU功率而异,但当Chrome达到限制时,它会在一个进程中运行从同个一站点打开的多个选项卡。

节省更多内存:Chrome中的服务化

同样的方法适用于浏览器进程。 Chrome正在进行体系结构的变更,以便将浏览器程序的每个部分作为一项服务运行,从而可以轻松拆分为不同的流程或汇总为一个流程。

一般的想法是,当Chrome在强大的硬件上运行时,它可能会将每个服务拆分为不同的进程,从而提供更高的稳定性,但如果它位于资源有限的设备上,则Chrome会将服务整合到一个进程中,从而节省内存占用。 在进行这种更改之前,在Android平台上已经使用了类似的方法来整合进程以减少内存使用。

图11:Chrome的服务化示意图,将不同的服务转移到多个进程或一个浏览器进程中

帧渲染器进程:站点隔离

网站隔离是Chrome中最近推出的一项功能,可为每个跨网站的iframe运行单独的渲染进程。 我们一直在讨论每个选项卡一个渲染进程的模型,它允许跨站iframe在单个渲染器进程中运行,并在不同站点之间共享内存空间。 在同一个渲染进程中运行a.com和b.com似乎没问题。 同源策略是Web的核心安全模型,它确保一个站点在未经同意的情况下无法访问其他站点的数据。 绕过此策略是安全攻击的主要目标。进程隔离是分离站点的最有效方法。 由于Meltdown和Spectre漏洞,我们更加需要使用进程来隔离站点。 默认情况下,自从Chrome 67启用桌面隔离功能后,选项卡中的每个跨站点iframe都会得到单独的渲染进程。

图12:站点隔离示意,指向站点内iframe的多个渲染器进程

启用站点隔离是一项需要很多年的工作。 站点隔离并不像分配不同的渲染进程那么简单;它从根本上改变了iframe彼此的交流方式。 在运行着不同iframe进程的的页面上打开devtools,意味着devtools必须在背后做大量的工作才能使其看起来无缝。即使通过简单的 Ctrl + F 来查找页面中的单词也意味着需要跨越不同的渲染进程进行搜索。 这就是浏览器工程师将站点隔离的发布作为一个重要里程碑的原因!

总结

在这篇文章中,我们介绍了浏览器体系结构的高级视图,并介绍了多进程体系结构的优点。 我们还介绍了Chrome中与多进程架构密切相关的服务化和站点隔离。 在下一篇文章中,我们将开始深入研究在显示一个网站时,这些进程和线程之间究竟发生了什么事情。

现代浏览器探秘(part 1):架构相关推荐

  1. 浏览器工作原理--Chorme架构

    一.什么是并行处理 计算机中的并行处理就是同一时刻处理多个任务,使用并行处理能大大提升性能. 二.线程 VS 进程 (1)线程是不能单独存在的,它是由进程来启动和管理的. (2)一个进程就是一个程序的 ...

  2. 浏览器内核之WebKit 架构与模块

    微信公众号:爱写bugger的阿拉斯加 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 此文章是我最近在看的[WebKit 技术内幕]一书的一些理解和做的笔记. 而[WebKit 技术内幕] ...

  3. 为什么浏览器会使用多进程架构

    在使用浏览器时偶然发现虽然仅仅打开一个标签页,但是在任务管理器内发现有多个浏览器进程在运行,占用了不小的内存,当时很纳闷:为什么一个浏览器却需要多个进程呢?不经意间在网上发现这篇文章,以Google ...

  4. mysql in优化_MySQL 探秘: 1 整体架构

    新开坑,计划做一系列专辑.由于 MySQL 源码太庞大,不可能面面俱到,先从丁奇<MySQL 实战 45 讲>[1] 案例开始入手,case by case 来做分享.同时强烈推荐丁奇的课 ...

  5. 【Soul网关探秘】微内核架构及实现

    引言 微内核架构是一种面向功能进行拆分的可扩展性架构,通常用于实现基于产品的应用. 一.基本架构 微内核架构包含两部分组件:核心系统(core system)和插件模块(plug-in modules ...

  6. 探秘主流BIOS架构:UEFI

    回顾计算机的发展历史,并不是一开始就形成了现在的硬件+固件+操作系统这样的分工合作.在大型机时代(20世纪60年代),比如<人月神话>中曾经介绍过的IBM System/360,其硬件.操 ...

  7. 深入理解浏览器原理和架构|硬核

    本文用47张图带你了解「浏览器的发展史」.「浏览器的架构」.「浏览器的基本原理」以及 「浏览器的其它小知识」 ???? 正文开始 浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示HTML文档. ...

  8. 改进程架构,Edge优化浏览器内存问题

    微软 Edge 团队称,"今天的浏览器更像是操作系统,而不是文档查看器.用户正在浏览器中执行越来越多的任务,而在桌面应用程序中执行的任务越来越少.与此同时,每个网页.Web 应用程序和扩展程 ...

  9. 翻译-现代浏览器的架构与发展

    A Reference Architecture for Web Browsers. 作者:纪翔 2011-05-28 摘要: 一个领域参考架构抽象出了这个领域的公共子系统以及这些子系统之间的关系.领 ...

  10. 钟翔平:坚持走手机浏览器架构创新之路

    本文来自腾讯大讲堂(DJT.QQ.COM),转载请注明出处. 短短十年左右的时间,移动终端和无线网络跨越了几代的革新,随之移动互联网时代悄悄来临.2011年,中国第三方手机浏览器市场用户规模持续增长, ...

最新文章

  1. 【js】内置对象array的常见方法的使用
  2. linux c atoi strtol 区别
  3. 组态王图素制作_组态王的图形及动画功能
  4. 微服务实践分享(5)缓存中心
  5. 我学员的一个问题及其我对之的解答,关于lr返回值问题
  6. asp.net+mysq 数据库操作类
  7. sonarqube扫描安卓代码
  8. nopCommerce的源代码结构和架构
  9. vs2013 未将对象引用设置到对象的实例
  10. [Qt入门]QTreeWidget控件创建
  11. 图像风格迁移(Neural Style)简史
  12. Eclipse中【Maven下载时,下载源码】设定方法
  13. 浅析ASP.NET HTTP Module
  14. webssh的安装与使用
  15. win10分辨率不能调整_win10无法调整分辨率显示灰色的解决方法
  16. 外文图书免费下载网站
  17. CSS外边距塌陷问题,吊打面试官
  18. Ubuntu中文件颜色的含义
  19. Golang的Panic和Recover
  20. 突破技术发展瓶颈、成功转型的重要因素

热门文章

  1. 要连plsql是不是要装oracle,PLSQL直接连接数据库,不装ORACLE
  2. c语言显示cpuid_ccpuid:CPUID信息模块。范例:显示所有的CPUID信息
  3. 478.在圆内随机生成点
  4. SRMD:Learning a Single Convolutional Super-Resolution Network for Multiple Degradations
  5. leetcode 225. Implement Stack using Queuesk
  6. 【ML小结9】聚类分析--k均值聚类
  7. 凸优化学习笔记(一):仿射集、凸集、锥
  8. hexo matery 相册 视频相册 相册加密 描述备注
  9. Pytm:威胁建模框架
  10. (详细带你分析错误):No property 属性名 found for type 类名,总结了其他解决办法