面试官:线程和进程是什么?

Chrome架构:仅仅打开了一个页面,为什么有4个进程?

在理解进程和线程之前,先了解下并行处理,因为理解了并行处理的概念,再理解进程和线程之间的关系就轻松许多了。

什么是并行处理?

计算机中的并行处理就是同一时刻处理多个任务。使用并行处理能大大提升性能。

let a = 1+2 //  任务一
let b = 20/5 // 任务二
let c = 7*8 //  任务三
//任务四 显示计算结果

单线程:分四步,按照顺序分别执行四个任务
多线程:分两步,第一步使用的三个线程同时执行前三个任务,第二步执行任务四

线程和进程的关系

  • 线程是不能单独存在的,它是由进程来启动和管理的。

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

  • 由图可知,线程是依附于进程,而进程中使用多线程并行处理能提高运算效率。

进程和线程之间的四个特点

  1. 进程中任意一个线程执行出错,都会导致整个进程的崩溃

  2. 线程之间共享进程中的数据
    在这里插入图片描述

  3. 当一个进程关闭之后,操作系统会回收进程所占用的内存

  4. 进程至今啊的内容相互隔离

如果进程之间需要进行数据的通讯,需要使用用于进程间通信(IPC)的机制。

单进程浏览器时代

顾名思义,单进程浏览器是指浏览器的所有功能模块都是运行在同一个进程里,这些模块包含了网络、插件、JavaScript运行环境、渲染引擎和页面等。
在这里插入图片描述
导致问题的出现:

  1. 不稳定
    最容易出问题的是插件渲染引擎模块,其中一个出现意外崩溃,会导致整个浏览器的崩溃。
  2. 不流畅
function freeze() {
	while (1) {
		console.log("freeze");
	}
}
freeze();

不好的脚本插件的使用,会让单进程浏览器变卡顿,页面的内存泄露也是单进程变慢的重要原因。
3. 不安全
使用C/C++等代码编写,可以通过插件来获取操作系统的任意资源,意味着这些插件可以完成操作你的电脑;也可以使用页面脚本通过浏览器漏洞获取系统权限,对你的电脑做一下恶意的事情,引起安全问题。

多进程浏览器时代

  • 早期多进程架构
    早期Chrome进程架构图
    由图可见,页面时运行在单独的渲染进程中的,页面的插件也是运行在单独的插件进程中,进程之间通过IPC机制通信。

不稳定问题解决:进程是相互隔离的,当页面或插件崩溃时,影响的仅仅时当前页面进程或插件进程,并不会影响到浏览器或其他页面
不流畅问题解决:javaScript运行在渲染进程中,即使当javaScript的脚本阻塞了渲染进程,影响到的也只是当前的渲染页面,并不会影响到浏览器或其他页面。内存泄漏问题就更简单了,关闭一个页面时,渲染进程也会被关闭,进程所占用的内存也会被系统回收
不安全问题解决:使用安全沙箱,沙箱里面运行的程序不能随意的在硬盘上写入数据,也不能在敏感位置读取数据,把插件和渲染进程锁在沙箱里运行,恶意程序也无法获取系统 权限了。

  • 目前多进程架构
    在这里插入图片描述
    由图可知,最新的Chrome浏览器包括:一个浏览器(Browser)主进程、一个GPU进程、一个网络(NetWork)进程、多个渲染进程和多个插件进程。
  1. 浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
  2. 渲染进程。核心任务是将HTML、CSS和JavaScript转换为用户可以与之交互的网页,排版引擎Blink和JavaScript引擎V8都是运行在该进程中,默认情况下,Chrome会为每个Tab标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
  3. GPU进程。Chrome刚发布时并没有GPU进程,而GPU使用的初衷是为了实现3D CSS的效果,只是后面随着页面和Chrome的UI界面都采用了GPU进程,使得GPU成为浏览器普遍的需求。最后Chrome在其多进程架构上引入了GPU进程。
  4. 网络进程。主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
  5. 插件进程。主要负责插件的运行,因插件容易崩溃,所以需要通过插件进程来隔离,保证插件进程崩溃不会对浏览器和页面造成影响。

看到这里就可以回到开头提到的问题了:仅仅打开一个也页面,为什么有4个进程?因为一个页面至少需要一个网络进程、一个浏览器进程、一个渲染进程、一个GPU进程,共四个;如果打开的页面有运行插件的话,还需要加上一个插件进程。

不过凡是有两面性,多进程模型提升了浏览器的稳定性、流畅性和安全性,不免带来一些问题:

  1. 更高的资源占用。因为每个进程都会包含公共基础结构的副本(如JavaScript运行环境),这就意味着浏览器会消耗更多的内存资源。
  2. 更复杂的体系架构。浏览器各模块之间耦合性高、拓展性差等问题,会导致现在的架构已经很难适应新的需求了。

最初的浏览器都是单进程的,它们不稳定、不流畅且不安全,之后出现了 Chrome,创造性地引入了多进程架构,并解决了这些遗留问题。随后 Chrome 试图应用到更多业务场景,如移动设备、VR、视频等,为了支持这些场景,Chrome 的架构体系变得越来越复杂,这种架构的复杂性倒逼 Chrome 开发团队必须进行架构的重构,最终 Chrome 团队选择了面向服务架构(SOA)形式,这也是 Chrome 团队现阶段的一个主要任务。

参考:

极客时间-《浏览器工作原理与实践》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值