Chrome浏览器内部揭秘(一)

1,232 阅读3分钟

本文转自 Inside look at modern web browser (part 1) - Chrome Developers,原作者为 Mariko Kosaka

阅读后觉得内容非常不错,为了加深记忆和理解,决定翻译一些重要的部分。(虽然掘金里已经有好几篇本文翻译了)

执行程序的进程与线程

在了解浏览器的架构之前,有必要了解一下进程与线程的概念。

进程可以理解为应用中执行的程序,而线程则是在进程内执行某个处理任务的更小的程序。

当你打开一个应用的时候,就会创建进程,而进程可能会创建一些线程,也可能不会。同时操作系统会给进程分配内存。但你关掉这个应用的时候,这些内存就会被释放。

进程可以让操作系统创建一个新进程来执行不同的任务,此时新进程也会被分配到一块内存。当两个进程之间需要通讯时,可以通过 IPC(内部处理通信)。进程之间是相互独立的,单一个工作中的进程没有反应,也不会影响到其他进程,所以很多应用都被设计成多进程的。

浏览器架构

最顶层是浏览器进程,它负责协调其他不同的进程。其次是渲染进程,Chrome 会为每个标签页创建一个进程,甚至是页面里嵌套的 frame,这样每个页面之间就能够互不影响,从而提高浏览器性能,同时也很吃性能。

图:Chrome 的多进程架构,渲染进程底下有很多层,因为浏览器为每个标签页创建一个进程。

每个进程都负责干什么?

**浏览器进程:**控制浏览器的部分,包括:地址栏、书签、前进/后退按钮,以及处理网络请求和文件访问。

**渲染进程:**控制标签页内网页呈现的所有内容。

**插件进程:**网页使用到的任何插件,比如 flash。

**GPU进程:**处理多个独立的 GPU 任务,它被分成不同的进程来处理多个 apps 的请求,并将他们绘制在同一个界面上。

另外还有拓展进程、通用进程等,打开 Chrome 的任务管理器可以看到更多。

多线程架构的优点

1.  每个标签页都是独立的进程,互相之间不影响。当任何一个标签页不响应了,其他的标签页也不会受到影响。

2. 多线程可以保证安全性和沙箱(一种在受限制环境下运行的安全技术)。

3. 因为每个进程被分配的内存空间是私有的,因此进程之间不能像进程内的线程一样自由的访问内存。

注意:Chrome 对同时创建的内存数量有最高限制,当达到最高限制的时候,Chrome 会开始把同一个网站的不同标签页放到一个进程中。

另外,Chrome 根据设备的性能来决定是否整合一些进程来节省性能。