您当前的位置:首页 > 计算机 > 软件应用 > 浏览器应用

Chrome 是多线程还是多进程?为什么?

时间:12-14来源:作者:点击数:

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 的渲染(性能)(当然这点线程也能做到)

因此,这样看起来用进程实现非常自然。

每个进程里都有什么在跑?

Chromium 里有三种进程——浏览器、渲染器和插件。

浏览器进程只有一个,管理窗口和 tab,也处理所有的与磁盘,网络,用户输入和显示的工作。这就是我们看到的 Chrome 界面。

渲染器开多个。每个渲染器负责处理 HTML、CSS、js、图片等,将其转换成用户可见的数据。当时 Chrome 使用开源的 webkit 实现这个功能。

顺便说一句,webkit 是由 Apple 开发的,当时有很多坑,也被长期吐槽;现在 Chrome 已经转成使用自家的 Blink 引擎了。

插件会开很多。每个类型的插件在第一次使用时会启动一个相应的进程。

总结下,渲染器进程和插件进程就是平时被杀的最多的进程了。

进程和线程的区别

做个简单的比喻:进程 = 火车,线程 = 车厢

  • 线程在进程下行进(单纯的车厢无法运行)
  • 一个进程可以包含多个线程(一辆火车可以有多个车厢)
  • 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
  • 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
  • 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
  • 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
  • 进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
  • 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-互斥锁
  • 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-信号量
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐