浏览器原理:1.宏观视角上的浏览器

宏观视角上的浏览器


Chrome架构

右击chrome,可以发现chrome也有任务管理器
chrome任务管理器
当使用Chrome只打开了一个页面,可以发现有多个进程在执行 !

这就要从操作系统的角度来看浏览器,也就是宏观视角。

首先介绍一点简单的操作系统知识

进程和线程

  • 并行处理

    即计算机同一时刻处理多个任务,与之相对的还有并发处理,两者的区别在于是否在同一时刻处理多个任务

  • 线程和进程

    多线程可以并行处理,但是线程是不能单独存在的,它是由进程来启动和管理的

    • 进程 即一个程序的运行实例

      启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,这样的一个运行环境叫做进程。

    进程和线程的关系

    • 进程中的任意一线程执行错误,都会导致整个进程的崩溃
    • 线程之间共享进程中的数据
    • 当一个进程关闭后,操作系统会回收进程所占用的内存
    • 进程之间的内容即进程与进程之间相互隔离

介绍完了,操作系统的基本知识,接下来简单介绍一下浏览器的发展历史

单进程浏览器时代

  • 浏览器的所有功能模块都运行在同一个进程里,这些模块里包含了网络、插件、JS运行环境、渲染引擎和页面等。该进程运行了三个线程,页面线程,网络线程和其他页面,页面渲染和渲染引擎以及JS运行环境都运行在页面线程当中。

    但这样全都运行在一个进程内,会导致单进程浏览器不稳定、不流畅、不安全

    • 不稳定

      插件、渲染引擎模块是最容易出现问题的模块

      一个插件、或者渲染引擎的意外崩溃会引起整个浏览器的崩溃,任一线程的错误都会引起整个进程的崩溃

    • 不流畅

      在上面的单进程浏览器架构中,所有的页面渲染模块、js执行环境以及插件都是运行在一个线程中,意思是同一时刻这三个模块只能有一个可以执行

      内存泄漏的问题,因为是单进程,所以导致任一线程中发生的内存泄漏最终会影响到全体线程

    • 不安全

      插件与页面脚本

      插件可以使用C/C++等代码来编写,通过插件可以获取到操作系统的任意资源,会引发一些安全问题

      页面脚本可以通过浏览器的漏洞来获取操作系统权限

多进程浏览器时代

  • 早期多进程架构

    Chrome在2008年发布了自己的浏览器架构设计,Chrome有三个进程,浏览器主进程,插件进程,渲染进程。
    浏览器主进程主要负责下载资源,管理IPC(进程之间的通信机制),显示渲染进程生成的图片。
    插件进程主要负责扩展程序的执行
    渲染进程主要负责解析HTML\CSS,渲染,执行JS,合成网页图片

    ​ 页面运行在单独的渲染进程中,插件也是运行在单独的插件进程中,进程之间通过IPC机制进行通信

    ​ 这样的架构是怎样解决了单进程架构的问题

    • 不稳定

      进程之间互相隔离,一个进程内的某个线程崩溃不会影响另外的进程

    • 不流畅

      JS运行在渲染进程,所以及时JS阻塞了渲染进程,影响到的也只是当前的渲染页面,并不会影响浏览器和其他页面,因为其他页面的脚本是运行在它们自己的渲染进程中的。

      内存泄漏,因为当一个页面,整个渲染进程也会被关闭,之后该进程所占用的内存都会被系统回收

    • 不安全

      采用多进程架构的额外好处是可以是使用安全沙箱,即操作系统给该进程上了一把锁,沙箱里面的程序可以运行,但是没有读写的权限。Chrome把插件进程和渲染进程都锁在了沙箱里面!所以恶意程序无法突破沙箱获取权限。

目前多进程架构

​ 包括 1个浏览器主线程,1个GPU进程,1个网络进程,多个渲染进程,多个插件进程,即增加了GPU进程和网络进程

  • 浏览器进程

    主要负责界面现实、用户交互、子进程管理,同时提供存储等功能

  • 渲染进程

    核心任务是将HTML、CSS和JS转换为用户可以为止交互的网页,排版引擎 Blink 和 JS引擎V8都是运行在该进程中,默认情况下,Chrome会为每个Tab标签创建一个渲染进程。渲染进程都是运行在沙箱模式下。

  • GPU进程

    Chrome刚开始发布的时候没有GPU进程,而GPU的使用初衷是为了实现3D CSS的效果,只是随后网页、Chrome的UI界面都选择采用GPU来绘制,这使得GPU称为浏览器普遍的需求,最后Chrome在多进程架构上也引入了GPU进程

  • 网络进程

    主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。

  • 插件进程

    主要负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离

多进程架构的缺点

  • 更高的资源占用

    因为每个进程都会包含公共基础结构的副本(如JS运行环境)

  • 更复杂的体系结构

    浏览器各模块之间耦合性较高,扩展性差等问题,会导致现在的架构已经很难适应新的需求

未来面向服务的架构

Chrome正在逐步构建Chrome基础服务,如果认为Chrome是便携式操作系统,那么Chrome基础服务便可以被视为该操作系统的基础系统服务层

同时Chrome还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源的设备上,Chrome会将很多服务整合到一个进程中,从而节省内存占用

操作系统,那么Chrome基础服务便可以被视为该操作系统的基础系统服务层

同时Chrome还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源有限的设备上,Chrome会将很多服务整合到一个进程中,从而节省内存占用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值