Chrome 是多进程的。
传统的浏览器被设计为显示网页,而Chrome的设计目标是支撑 Web App(当时的 js 和相关技术已经相当发达了,Gmail 等服务也很成功)。这就要求 Chrome 提供一个类似于 操作系统 感觉的架构,支持 App 的运行。而 App 会变得相当的复杂,这就难以避免出现 bug,然后 crash。同时浏览器也要面临可能运行 恶意代码。流览器不能决定上面的 js 怎么写,会不会以某种形式有意无意的攻击浏览器的渲染引擎。如果将所有这些 App 和浏览器实现在一个进程里,一旦挂,就全挂。
因此 Chrome 一开始就设计为把隔离性作为基本的设计原则,用进程的隔离性来实现对 App 的隔离。这样用户就不用担心:
以及 Web App之 间是并发的,可以提供更好的响应,一个 App 的渲染卡顿不会影响其他 App 的渲染(性能)(当然这点线程也能做到)
因此,这样看起来用进程实现非常自然。
Chromium 里有三种进程——浏览器、渲染器和插件。
浏览器进程只有一个,管理窗口和 tab,也处理所有的与磁盘,网络,用户输入和显示的工作。这就是我们看到的 Chrome 界面。
渲染器开多个。每个渲染器负责处理 HTML、CSS、js、图片等,将其转换成用户可见的数据。当时 Chrome 使用开源的 webkit 实现这个功能。
顺便说一句,webkit 是由 Apple 开发的,当时有很多坑,也被长期吐槽;现在 Chrome 已经转成使用自家的 Blink 引擎了。
插件会开很多。每个类型的插件在第一次使用时会启动一个相应的进程。
总结下,渲染器进程和插件进程就是平时被杀的最多的进程了。
做个简单的比喻:进程 = 火车,线程 = 车厢

