为什么chrom采取多进程方式?

简单点说: chrome是一个用内存换速度和安全性的浏览器

传统的浏览器被设计为显示网页,而Chrome的设计目标是支撑”Web App”(当时的js和相关技术已经相当发达了,Gmail等服务也很成功)。这就要求Chrome提供一个类似于”操作系统”感觉的架构,支持App的运行。而App会变得相当的复杂,这就难以避免出现bug,然后crash。同时浏览器也要面临可能运行”恶意代码”。流览器不能决定上面的js怎么写,会不会以某种形式有意无意的攻击浏览器的渲染引擎。如果将所有这些App和浏览器实现在一个进程里,一旦挂,就全挂。

因此Chrome一开始就设计为把隔离性作为基本的设计原则,用进程的隔离性来实现对App的隔离。这样用户就不用担心:一个Web App挂掉造成其他所有的Web App全部挂掉(稳定性)一个Web App可以以某种形式访问其他App的数据(安全性)以及Web App之间是并发的,可以提供更好的响应,一个App的渲染卡顿不会影响其他App的渲染(性能)(当然这点线程也能做到),因此,这样看起来用进程实现非常自然。

chrom

我们再来看看Chrome的多进程体系架构的优势:

  1. 每打开一个新网页,Chrome都会开启一个新的Tab,每个插件都会对应启动一个新进程,这样即便某个网页卡死也不影响其他网页的正常显示。
  2. 早期的webkit内核有不少内存泄漏,采用多进程架构,一个进程结束内存全部回收,不用考虑内存泄漏的问题。
  3. 多进程架构相比多线程架构的安全性高的不是一星半点。

反观早期的firefox之类的浏览器就经常整体卡死或者崩掉,另外firebox在2017年之后也改用多进程架构了。在插件的实现中,html和js的规则是非常松散的,不管浏览器考虑的边界条件多完备,总是有各种奇怪的东西需要解析和兼容,随便一个小错误就会导致卡死或者崩溃。


为什么chrom采取多进程方式?
https://asuka24601.github.io/2024/02/20/为什么chrom采取多进程方式?/
作者
Asuka24601
发布于
2024年2月20日
许可协议