Architecture Google Chrome如何将标签分离成单独的流程,同时看起来像一个单一的应用程序?

Architecture Google Chrome如何将标签分离成单独的流程,同时看起来像一个单一的应用程序?,architecture,browser,google-chrome,multiprocess,Architecture,Browser,Google Chrome,Multiprocess,我们被告知谷歌浏览器在一个单独的过程中运行每个标签。因此,一个选项卡中的崩溃不会导致其他选项卡出现问题 另外,多进程主要用于没有GUI的程序中。我从未读过任何可以将多个GUI进程嵌入一个进程的技术 Chrome是如何做到这一点的 我问这个问题是因为我正在设计CCTV软件,该软件将使用来自多家摄像机制造商的视频解码SDK,其中一些还远不稳定。因此,我更喜欢在不同的进程中运行这些SDK,我认为这与Chrome类似。基本上,它们使用另一个进程将所有SDK粘在GUI中 Google Chrome创建三种

我们被告知谷歌浏览器在一个单独的过程中运行每个标签。因此,一个选项卡中的崩溃不会导致其他选项卡出现问题

另外,多进程主要用于没有GUI的程序中。我从未读过任何可以将多个GUI进程嵌入一个进程的技术

Chrome是如何做到这一点的


我问这个问题是因为我正在设计CCTV软件,该软件将使用来自多家摄像机制造商的视频解码SDK,其中一些还远不稳定。因此,我更喜欢在不同的进程中运行这些SDK,我认为这与Chrome类似。

基本上,它们使用另一个进程将所有SDK粘在GUI中

Google Chrome创建三种不同类型的进程:浏览器、渲染器和插件

浏览器:只有一个浏览器进程,用于管理浏览器的选项卡、窗口和“chrome”。此过程还处理与磁盘、网络、用户输入和显示的所有交互,但它不尝试解析或呈现来自web的任何内容

渲染器:浏览器进程创建许多渲染器进程,每个进程负责渲染网页。渲染器进程包含处理HTML、JavaScript、CSS、图像等的所有复杂逻辑。Chrome通过开源WebKit渲染引擎实现了这一点,苹果的Safari网络浏览器也使用了该引擎。每个渲染器进程都在沙箱中运行,这意味着它几乎无法直接访问磁盘、网络或显示器。与web应用程序的所有交互,包括用户输入事件和屏幕绘制,都必须经过浏览器过程。这使浏览器进程可以监视呈现器的可疑活动,如果怀疑发生了漏洞攻击,则杀死它们

插件:浏览器进程还为正在使用的每种类型的插件(如Flash、Quicktime或Adobe Reader)创建一个进程。这些过程只包含插件本身,以及一些让它们与浏览器和渲染器交互的粘合代码


来源:

呈现网页的大部分工作都是计算内容的确切位置(即,放置每张图片的位置、呈现每段文本的颜色)。这项工作是在一个单独的过程中完成的。一旦这个单独的进程确定了所有东西的去向,它就会将这些信息传递到主Chrome进程,主Chrome进程会在屏幕上绘制所有元素


目前还不清楚您的视频sdk系统是如何设置的。但是您可以有一个过程来解压缩视频,另一个过程将其呈现给显示器。不过,您很可能正在使用opengl或DirectX。这些API可能会对如何在不同的进程之间进行划分施加一些限制。

在这种情况下,基本设计很有趣

以下是相关信息,特别是本节

架构概述:


窗口对象——用于实现窗口小部件的可绘制的小矩形区域,而不是用户认为的窗口——可以使用共享内存或X协议在进程之间完美共享。查看工具箱的文档。

我刚刚给出了第一个答案(解释“浏览器”与“渲染器”与“插件”的答案) 上涨…这似乎是最完整的,对我来说很有意义

我要补充的唯一一件事就是对谷歌设计的原因多加几句评论 是这样的,并给出一个意见,为什么它一直是我的第一选择 对于一个全面的/每天的浏览器。(虽然我知道它是如何(而不是为什么)的。) (被问到的问题。)

设计使单个组件的代码在单独的进程中允许 操作系统可以“内存保护”进程,防止意外(或故意)修改每个进程 其他未在中明确设计的方式

在这样的设计中,唯一可以读写共享数据的部分是 设计用于访问该数据的部件,并允许控制 该访问只是“读”访问或“读”和“写”访问,等等,并且 这些访问控制是在硬件中实现的,它们是可靠的保证 不能违反访问规则。因此,插件和扩展 来自其他作者和公司,在单独的选项卡/流程中运行,无法 彼此分手

这种设计的效果是将改变的机会降至最低 某些代码或数据不是为更改而设计的。这是为了安全 使代码更加可靠,错误更少

对我来说,谷歌拥有如此复杂的设计这一事实就足以证明这一点 事实上,谷歌似乎对这些概念有着极好的理解,并且 构建了一个优秀的产品。(也就是说,作为一个web开发人员,我们仍然必须进行测试。) 我们的web代码支持多个浏览器。而且,像Firefox这样的浏览器 已经存在很长一段时间了,并且拥有一个优秀的web开发人员相关团队 “附加组件”对于某些任务仍有一些优势。)

但是,对于日常的整体浏览器使用,对于几乎所有的任务,Chrome浏览器
已成为我的第一选择。(只是我的意见,当然,YMMV。)

我不明白。看起来这些选项卡属于浏览器进程,这些渲染如何在选项卡上绘制图片和文本属于另一个进程?它们不属于浏览器进程。浏览器进程只是管理它们浏览器进程也会创建浏览器GUI,但选项卡的内部逻辑(容易崩溃的危险部分)由单独的渲染器进程(每个选项卡一个)处理.很好的总结!需要补充的一点是,每个Chrome扩展都在各自的进程中运行。如果您想知道进程之间如何通信,请查看Chrome source base.Hmm.I中的IPC部分