Karam
Articles68
Tags50
Categories14
Chrome架构——浏览器架构

Chrome架构——浏览器架构

进程

进程的概念,当一个进程运行的时候,进程是一个程序运行的实例,操作系统会为进程分配一段内存使用,用来存放代码,运行数据和执行任务的主线程叫做进程

进程和线程

线程不能脱离进程单独存在,线程运行在进程中,需要进程启动和管理,多线程可以并行处理任务

进程和线程的关系特点

  1. 进程中的任一线程崩溃,都会导致进程崩溃
  2. 线程之间共享数据
  3. 一个进程关闭后,进程执行的内存会被回收,浏览器关闭了,内存就被回收了(解决内存泄漏问题)
  4. 进程隔离性,每个进程间的数据是不可以相互读写的,每个进程只能访问自己占有的数据,所以一个进程崩溃了并不会影响到其他进程的运行

单进程浏览器问题

  1. 不流畅:插件和脚本的运行都在单线程上,执行的时候会独占整个线程导致卡顿;内存泄漏也会导致页面卡顿,关闭页面内存也不会被全部回收
  2. 不稳定:很多功能需要借助插件完成,如果插件崩溃,整个页面都会崩溃;渲染引擎模块也会引起不稳定,如果渲染引擎执行复杂的JS代码可能会导致页面崩溃
  3. 不安全:一个进程里的线程读写共享,可以通过插件来访问各种数据,也可以通过恶意脚本攻击

    如何解决单进程的问题

  • 不流畅:插件和脚本都单独运行在一个进程中,如果其中一个崩溃就不会影响到其他的进程运行;内存泄露问题,关闭页面的时候浏览器都会回收内存
  • 不稳定:多进程互不影响,因为进程执行的时候是隔离的
  • 不安全:多进程,每个进程之间的内存隔离,不能互相访问,也就是安全沙箱,别的进程不可以访问其他线程的资源,像是给进程上了一把锁,恶意插件也没法突破安全沙箱

多进程浏览器

目前的多进程浏览器的进程分为:一个浏览器进程,一个网络进程,多个渲染进程,一个GPU进程,多个插件进程

  1. 浏览器进程:浏览器的用户交互,子进程的管理,数据的存储等
  2. 网络进程:请求网络的进程
  3. 渲染进程:HTML+CSS+JavaScript运行成一个页面,包括JavaScript的V8引擎和排版银枪Blink都运行在这里,存放HTML+CSS+JavaScript的代码,执行任务,运行代码
  4. GPU进程:用于处理图形计算,一般用于计算视频,图形的渲染
  5. 插件进程:运行插件的进程,主要是隔离插件的运行,防止插件影响其他线程的运行和安全性考虑