无意间翻到了ChormeDeveloper上的这个系列。作者的描述很清楚,图片也很好。推荐阅读(阅读时需要注意这篇博文时间是2018年9月,有些东西目前可能有些过时了)。这是浏览器架构系列博客的第一部分。CPU和GPU这里就不展开讨论了,大家可以去原文查看。在进程和线程上执行程序在深入研究浏览器之前,我们需要掌握进程和线程的概念。进程可以看成是一个应用程序执行程序,进程内部存在一个线程来执行程序的任何部分。当应用程序启动时,会创建一个进程。该进程创建一个或多个线程来帮助它完成工作,但这不是必需的。操作系统为进程提供内存块。所有进程的状态都存储在这个专用的内存空间中。当您关闭应用程序时,该进程将消失,操作系统将释放内存。一个进程可以使操作系统启动另一个进程来运行其他任务。这样,操作系统就会为新的进程分配新的内存。如果两个进程需要对话,可以使用IPC(Inter-ProcessCommunication)来完成。许多应用程序都设计为具有多个进程,因为如果一个进程变得无响应,它可以重新启动而不会影响应用程序的其他进程。浏览器架构了解了以上知识,那么我们如何使用进程和线程来构建浏览器应用程序呢?可以是单进程多线程架构,也可以是多进程通过IPC通信的架构。需要注意的是,不同的架构是实现细节。浏览器的构建没有标准,两种浏览器可能使用的架构方法可能不同。本系列将使用如下图所示的Chrome最新架构。最上面是浏览器进程,负责协调和调度其他进程。对于渲染进程,创建多个进程并将其分配给每个选项卡。直到最近,Chrome才竭尽全力为每个选项卡分配一个进程。现在,Chrome尝试为每个站点提供自己的进程,包括iframe的进程。每个过程控制什么?下面分别介绍每个进程及其控制的位置:ProcessResponsibleBrowser负责处理属于Chrome的部分,比如地址栏、书签、前进后退按钮等,以及一些不可见的需要权限的部分,比如作为网络请求和文件访问,Renderer负责处理标签页中的显示工作。Plugin负责处理网站使用的所有插件。例如,FlashGPU被分离出来,独立处理GPU任务。由于GPU会处理不同应用的请求,绘制到同一个地方,所以分开拆解。除了这些,还有其他进程,例如扩展进程和实用进程。如果你想查看你的Chrome有多少个进程,可以点击右上角的,选择更多工具,然后选择任务管理器,就可以看到当前运行的进程。多进程架构的好处上面提到了Chrome使用多个渲染进程。想象一个场景,每个选项卡都有自己的进程。例如,如果您打开了三个选项卡,则每个选项卡对应一个进程。当其中一个没有反应时,您可以将其关闭,其他选项卡正常。如果三个都在同一个进程中,而那个没有响应,则三个都将死亡。将浏览器的工作拆分为多个进程的另一个好处是安全性和沙盒。由于操作系统提供了限制进程权限的方法,因此浏览器可以在某些进程上限制这些功能。例如,Chrome限制可以接受任意用户输入的渲染器进程访问任意文件。由于进程的内存是隔离的,因此这些进程都保留了底层基础设施的副本,例如V8引擎。这意味着更多的内存被浪费了,因为它们无法共享。为了节省内存,Chrome限制了打开的进程数。此限制取决于计算机的性能。当达到限制时,Chrome将在一个进程中运行来自同一网站的多个选项卡。节省更多内存-ChromeServicification将相同的方法应用于浏览器,Chrome将浏览器的每个部分作为服务运行,以便轻松分解或组合。大致的思路是,当Chrome运行在一台性能强大的电脑上时,将服务拆分到不同的进程中,以获得更高的稳定性,但如果电脑性能不好,Chrome会将服务合并到一个进程中,以节省内存使用.站点隔离站点隔离是Chrome的一项最新功能,它为每个跨站点iframe运行单独的渲染器进程。刚才我们说的是每个标签启动一个进程的模式,它允许跨站点的iframe在渲染进程中执行,并在不同站点之间共享内存。在同一个进程上运行a.com和b.com似乎没问题。但同源策略是Web的核心安全策略,它保证一个站点不能在未经同意的情况下访问其他站点的数据。这样一来,绕过这个安全策略就是安全攻击的主要目标。进程隔离是拆分站点的最有效方法。随着Meltdown和Spectre漏洞的披露,我们需要使用进程来隔离站点。自Chrome67以来,在桌面上默认启用站点隔离,标签中的每个跨站点iframe都会启动一个单独的呈现过程。启用站点隔离需要多年的研究,它不像分配不同的渲染进程那么简单。它从根本上改变了iframe相互通信的方式。在运行来自不同站点的iframe的页面上打开DevTools意味着DevTools必须在幕后工作以使其看起来无缝。即使运行Ctrl+F进行搜索也意味着在不同的进程中执行所有操作,这就是为什么浏览器工程师将站点隔离的发布作为一个重要的里程碑。PS:文章上传后,发现部分动画上传失败。为了更好的阅读体验,欢迎来到公众号查看文章,以后还有下三篇。欢迎关注、转发、分享和支持我。
