浏览器工作原理:基本概念

101 阅读2分钟

这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

先导

首先,明确一些概念:

  • 并行处理:同一时刻处理多个任务,多线程
  • 串行处理:按顺序执行任务,单线程

线程与进程

线程需要通过进程启动与管理。这里来说下,进程的概念

  • 进程: 一个程序的运行实例。当我们启动一个程序时,系统为程序开辟一片内存空间,用来存放代码、运行中数据和执行任务的主线程,这片内存即为进程 线程在进程中进行,而多线程由于可同时间处理多个任务可有效提高运算效率
基于进程和线程的关系有几点注意:
  1. 任一线程执行出错都会导致进程崩溃 例如,运算多个表达式,其中一个执行错误(/0),整个程序无法得到任一线程的结果

  2. 线程间共享数据 多个表达式,在最后求和时会调用多个线程的数据,因此达到数据共享

3.当一个进程关闭后,系统回收内存 这里就算内存泄漏也会因关掉程序而回收内存 4, 进程间操作独立互不干扰

浏览器的进化

单进程浏览器

2007年前都是单进程的,所有模块(插件、JS运行环境、渲染引擎、页面等),很显然这样的浏览器缺陷很多。

  1. 不稳定:插件和渲染引擎的崩溃都会导致浏览器崩溃
  2. 不流畅:同一时间只能运行一个模块,单线程的缺点,此外还有内存泄漏导致浏览器速度变慢,因此体验极差

多进程浏览器

2008年应运而生,插件、渲染引擎、都分成独立的进程进行,由于各进程间独立,进程间的通信通过IPC(Inter-Process Communication)机制实现

目前浏览器的进程:

  • 浏览器进程:界面显示与用户交互、子进程管理、存储等
  • 渲染进程: 将三大件转换成网页、Blink和JS v8引擎运行在这里(每个Tag标签默认都有一个渲染进程)
  • GPU进程:加速处理计算请求,一般涉及图形、视频的渲染
  • 网络进程:网络资源加载情况
  • 插件进程: 插件运行 如何解决单进程的BUG:
  1. 使用进程隔离解决不稳定和不流畅
  2. 使用v8垃圾回收机制解决内存泄漏
  3. 安全沙箱解决插件恶意攻击