chrome浏览器为什么用多进程而不用多线程

1,040 阅读3分钟

多进程和多线程的区别

  • 多进程更耗资源。每个进程都有独立的资源,线程间共享资源
  • 多进程更安全。线程间共享内存,进程间通信更麻烦
  • 多进程更稳定。一个进程崩溃了不一会影响其他进程。一个线程崩溃了可能会使整个进程崩溃

为什么用多进程

速度

使用多进程就是用内存换速度,为了加快浏览器tab的加载速度,chrome浏览器每个tab使用一个进程,这样即使因为某个页面崩溃了也不会影响其他页面,这就是为什么firefox经常整个浏览器崩掉的原因,因为它是整个浏览器用一个进程,每个tab用一个线程,各种插件也都是线程

可靠

每个tab使用一个进程,一个tab的快慢或者崩溃不会影响其他tab。而每个tab使用一个线程,当一个tab崩溃了就会影响所有tab,尤其是开启了很多tab,继续开tab会很慢。

安全

进程间通信更麻烦,线程间可以共享进程的资源。如果使用多线程,当某个tab有病毒,可能会泄露其他tab的数据

用多进程的缺点

1.当开启的页面过多,太多的进程会导致消耗很多资源
2.进程启动比线程慢
但是现在设备内存已经不像二十年前了,不需要太计较内存大小,而且进程启动方面也可以优化,因此浏览器使用多进程已经是大势所趋

chrome浏览器的每个进程做了什么

Chrome 创建三种类型的进程:浏览器,渲染器和插件程序

  • 浏览器:只有一个浏览器进程,管理标签,窗口和 “Chrome”,也处理磁盘,网络,显示的交互,但不会去解析和渲染任何网页内容
  • 渲染器:渲染器进程由浏览器进程创建,每个渲染器进程响应一个网页。包括HTML,JavaScript,CSS,images等复杂的逻辑。使用 WebKit渲染引擎。每个渲染进程都在沙盒中,通过浏览器进程访问磁盘,网络,显示器。如果渲染器有异常,浏览器进程监视器可以杀掉
  • 插件程序:每种插件由浏览器进程创建一个进程,例如 Flash,Quicktime,Adobe Reader.包含插件程序本身和一些胶水代码来与浏览器和渲染器进行交互

chrome特点

  • 开很多进程电脑会变慢,所以渲染器进程限制在30个,如果超个限制,新的标签会重复使用已存在的渲染器进程。因此,可能一个渲染器进程被多个网址使用。
  • 没有在进程中放置跨站点的帧,也没有为所有类型的跨站点导航交换标签的渲染器进程。目前,只是通过浏览器的“Chrome”为导航交换标签的进程。
  • 每个插件程序,Chrome会在第一个网页使用时创建插件进程,在所有使用该插件的网页都关闭后销毁插件进程。

firefox在54版本之后也支持了多进程。

参考

【1】为什么chrome采用多进程方式?
【2】Chrome 为什么使用多进程,即每个站点用一个进程
【3】为什么浏览器采用多进程模型
【4】Chrome 为什么多进程而不是多线程?
【5】[下载]多进程终于到来:Firefox 54.0稳定版发布