进程?线程?傻傻分不清楚

今天,我来学习一下关于浏览器的知识,想着让本身的知识体系更加系统一点的心态来学习一下进程和线程
什么是进程?什么是线程?都有啥用?咱们来参考Chrome浏览器的架构,去具体的理解这二者的关系和用途....

咱们先来看这样一个颇有意思的状况, 咱们仅仅打开一个页面, 为何出现了四个进程??? 这里要注意, 这是四个进程!!!

image.png

咱们带着这样的思考,先来了解一个问题,什么是并行处理???

答: 计算机中的并⾏处理就是同⼀时刻处理多个任务,⽐如咱们要计算下⾯这三个表达式的值,并显⽰出结果。浏览器

A = 1+2
B = 20/5
C = 7\*8

在编写代码的时候,咱们能够把这个过程拆分为四个任务:安全

任务1 是计算A=1+2;
任务2 是计算B=20/5;
任务3 是计算C=7*8;
任务4 是显⽰最后计算的结果。

正常状况下程序可使⽤单线程来处理,也就是分四步按照顺序分别执⾏这四个任务。网络

多线程会怎么处理呢? 就两步:多线程

第一步: 同时执行任务1,2,3
第二部: 最后执行任务4

哇哦,这样子会节省不少时间啊,大大滴提高了咱们的性能架构

哈哈哈,是的,多线程会大大滴提高性能,可是 线程不可能独立存在,它是由进程来启动管理的, 那进程是啥???性能

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

来看下面这张对比图:

image.png
从图中能够看到,线程是依附于进程的,而进程中使用多线程并行处理能提高运算效率spa

总结来讲吧,进程和线程有以下四个特色:
1. 进程中的任意一个线程执行出错,都会致使整个进程崩溃操作系统

2. 线程之间共享进程中的数据
image.png插件

从上图能够看出,线程一、线程二、线程3分别把执行的结果写⼊A、B、C中,而后线程2继续从A、B、C中读 取数据,用来显示执行结果。

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

当一个进程退出的时候,操做系统就会回收该进程所申请的全部资源。好比,关闭Chrome浏览器的页面,那该页面所占用的资源就会被系统回收

注意: 即便其中任意的线程由于操做的不当,从而致使内存泄漏,这些内存也会被回收

4. 进程之间的内容是相互隔离的
一个A进程与一个B进程,两个进程是相互隔离,没法访问的,若是你须要进程之间进行数据通讯,这时候要使用进程间的通讯机制(IPC)

为何要更改架构呢?以前的架构是什么?


为啥要改架构呢?确定是由于时代在进步啦....

你这不废话, 额..., 那这么说, 他更改架构确定是没法知足一个阶段内的用户需求, 大家可能没经历过, 可是我经历过, 不是Chrome浏览器, 是IE.....

当我打开许多页面的时候, 其中的一个页面崩溃了, 但是却致使整个浏览器凉凉...., WTM.....心态炸了啊, 搞个球啊...., 哈哈哈, 那时候就是这样------那时就是单进程浏览器时代

他把全部的进程模块都运行在了一个进程里面, 你想一想一下, 我打开了5个页面, 这些页面都是同一个进程, 那我一个页面崩溃了, 确定带动了其余页面啊, 那为啥当时没感受啥呢, 仍是能忍受, 唉, 一言难尽, 没有对比就没有伤害呗!!!

那咱们来根据以前的架构对比一下:

单进程浏览器所存在的问题:

问题1: 不稳定

很明显,以前的浏览器非常不稳定,具体来讲,以前的浏览器实现Web视频、Wab游戏等要借助于插件来实现,插件这个东西自己就不稳定, 你还运行在浏览器里, 一个插件崩溃了, 哦也....集体凉凉,对吧!!!

那就不会吧插件作稳定点啊, 好插件稳定了, 渲染引擎模块也是不稳定的, 这...., 这点工资很难实现这个需求啊, 哈哈哈

问题2: 不流畅

咋会不流畅呢?很简单,我写了一个无限循环的脚本, 放进浏览器中, 哈哈哈 ,只要你打开了我这个页面, 你浏览器就凉凉, 额..., 操做挺骚啊~~

除了这个,想一想一下, JS代码运行在这个进程中之外, 还有插件...., 你保证你不遍历了? 额....,TMD。哈哈哈,这时候开始心态就崩了?早了点!!TM还有啥? 页面的内存泄漏

他咋会...., 有问题的页面关了不就好了? 不行, 首先浏览器的内核很是复杂, 运行一个复杂点的页面, 会存在内存不能彻底回收的状况, 这个须要理解, 可是随着使用时间越长, 内存占用越高, 浏览器愈来愈慢,啊....上天,这东西能用???哈哈哈,别急,还有问题....没结束呢!!!

问题3: 不安全

若是, 一个插件释放了病毒, 或者一个页面释放了病毒, 窃取了你的帐号密码,诶嘿,那你想一想,同一进程下的其它页面吧..., 卧槽,我登陆的传奇啊, 个人贪玩蓝月啊, 咋一夜装备都被卖了啊...., 哈哈哈,TMD...我想起被盗号的时候了...

多进程浏览器特色:

特色1: 解决不稳定性

进程是相互隔离的, 你的其中一个页面进程崩溃, 诶?浏览器没事,哈哈哈,这个页面关闭,再打开就行

特色2: 解决不流畅

一个页面死循环,千千万个页面没咋地,哈哈哈, 那我这个页面内存泄露了咋整? 别慌啊, 关闭这个页面, 回传都会被系统回收,nice,NB!!!

特色3: 安全问题

这里有一个名词, 你们应该听过, 安全沙箱, 具备问题的地方,都会被放到沙箱里面, 恶意程序没法突破沙箱获取系统权限,哦吼?盗号?不存在滴....

如今你应该明白了, 问啥打开一个Chrmoe页面有四个进程了, 至少须要1个网络进程, 1个浏览器进程, 1个GPU进程, 1个渲染进程; 若是运行了插件, 还会有1个插件进程

那如今的多进程架构就没啥缺点?
想啥呢, 没缺点还要需求干吗, 哈哈哈

缺点1: 更高的资源占用

每一个进程都会包含公共基础结构的副本(JS的运行环境), 这就意味着消耗更多的内存资源, 换个128G的内存,哈哈哈....

缺点2: 更复杂的体系架构

浏览器各模块之间耦合性高, 扩展性差等问题, 这样会致使如今的架构很难适应新的需求, 时代变化没法预测呀, 开发人员也很不容易滴

为了解决如上的问题, 在2016年,Chrome团队使用面向服务架构, 我擦,2016年就这么高大上了???

这样就把原来的各类模块从构成独立的服务, 每一个服务都会在独立的进程中运行, 访问服务必须定义好接口, 经过IPC来通讯, 这样就构建了一个更加内聚、松耦合、易于维护的扩展的系统

这里就再也不多阐述了

总结:


  1. 咱们了解了什么是进程,什么是线程,以及他们的相互关系
  2. 咱们了解了为何会出现多进程架构,以及他的好处,还有单进程架构的不足
  3. 咱们知道了Chrome浏览器将来发展的方向, 这将是一个不断更新迭代的漫长过程, 也是咱们技术人员须要不断了解研究的漫长过程

好啦, 就聊到这里, 关注一下, 避免迷路, 每周不定时,不定量更新!!!

谢谢你们支持!!!

相关文章
相关标签/搜索