打开一个页面会启动四个进程的原因

148 阅读5分钟

一、什么是并行处理

A = 1 + 2; 
B = 20 / 5; 
C = 3 * 6;

如上代码可以拆分成四个任务

任务一:计算A = 1 + 2;

任务二: 计算B = 20 / 5;

任务三: 计算C = 3 * 6;

任务四:显示最后计算结果

按照单线程来处理是按照四部分别执行这四个任务

采用多线程只需要“两步”, 第一步使用三个线程同时执行前三个任务,第二部在执行第四个显示任务;

对比分析可以得出结论使用并行处理能大大提升性能

线程VS进程

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

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

image.png

线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率

总结来说,线程和进程之间的关系如下:

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

2、线程之间共享进程中的数据

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

当一个进程退出时,操作系统会回收该进程所申请的所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确的回收

4、进程之间的内容相互隔离

进程隔离是为保护操作系统中进程互不干扰的技术,每一个进程只能访问自己占有的数据,也就避免出现进程A写入数据到进程B的情况。因为进程之间的数据是严格隔离的,所以如果一个进程崩溃,或者挂起,是不会影响到其他的进程。如果进程之间需要进行数据之间的通信,就需要使用用于进程间通信(IPC)的机制。

二、单进程浏览器时代

单进程浏览器是指浏览器的所有功能模块都是运行在同一个进程里,这些模块包含网络、插件、JS运行环境、渲染引擎和页面等。

这么多功能模块运行在同一个进程中,是导致单进程浏览器不稳定、不流畅和不安全的主要原因。

问题1:不稳定

早期浏览器需要借助插件来实现web视频、游戏等功能,插件容易出现问题,并且还运行在浏览器进程中,如果一个插件出现问题就会导致浏览器崩溃。

渲染引擎模块也是不稳定的,通常一些复杂的js代码就有可能引起整个渲染引擎模块的崩溃,也会引起整个浏览器的崩溃。

问题2:不流畅

所有插件执行环境代码都是运行在同一个线程中,如果遇到阻塞任务会导致浏览器卡顿,页面的内存泄漏也会导致单进程变慢。通常浏览器的内核都是非常复杂的,运行一个复杂的页面在关闭页面,会存在内存不能完全回收的情况,这样导致的问题是使用时间越长,内存占用越高,浏览器也会因此变得卡顿。

问题3:不安全

当你在运行一个插件的时候,插件可以获取到操作系统中的任意资源,也就是可以完全操作电脑,如果是恶意插件可以通过植入病毒,窃取账号密码等导致你的电脑不安全。

多进程浏览器时代

三、早期多进程架构

image.png

由于进程之间相互隔离,所以当一个页面或者插件崩溃时只会影响到当前的页面进程或者插件进程,不会影响到浏览器和其他页面。

js运行在渲染进程中,即使js阻塞也只会影响到当前页面的渲染。并且关闭当前页面,整个渲染进程也会被关闭,那么该进程的内存也会被回收,这样就解决了浏览器页面的内存泄漏问题。

安全问题:采用多进程架构可以使用安全沙箱,沙箱里面的程序可以运行,但是不呢个在硬盘上写入任何数据,也不能在敏感位置读取数据,也就是恶意程序无法突破沙箱去获取系统权限。

目前多进程架构

image.png

浏览器进程:负责页面展示,用户交互,子进程管理,存储功能等。

渲染进程:将HTML、css和js转换为用户可以交互的页面,排版引擎Blink和V8引擎都运行在该进程中,渲染进程运行在沙箱中。

GPU进程:绘制UI界面。

网络进程:负责页面的网络资源加载。

插件进程:负责插件的运行。

所以打开一个页面会启动浏览器主进程,渲染进程,GPU进程,网络进程四个进程,以及一个额外的插件进程。

缺点:

1、更高的资源占用

2、更复杂的体系架构

四、未来面向服务的架构SOA

chrome目前的发展会朝向现代操作系统所采用的“面向服务架构"发展,原来各种模块会被重构成独立的服务,每个服务可以在独立的进程中运行,访问服务必须使用定义好的接口,通过IPC来通信、从而构建一个更内聚,松耦合,易于维护和扩展的系统。

image.png 目前chrome正处在老架构向面向服务架构过度的阶段。

IPC(进程间通信方式的介绍)_ipc通讯-CSDN博客