关于前端:进程线程傻傻分不清楚

47次阅读

共计 2655 个字符,预计需要花费 7 分钟才能阅读完成。

明天, 我来学习一下对于浏览器的常识, 想着让本人的常识体系更加零碎一点的心态来学习一下过程和线程
什么是过程? 什么是线程? 都有啥用? 咱们来参考 Chrome 浏览器的架构, 去具体的了解这两者的关系和用处 ….

咱们先来看这样一个很有意思的状况, 咱们仅仅关上一个页面, 为什么呈现了 四个过程 ??? 这里要留神, 这是 四个过程!!!

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

答: 计算机中的并⾏解决就是同⼀时刻解决多个工作,⽐如咱们要计算下⾯这三个表达式的值,并显⽰出后果。

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

哇哦, 这样子会节俭很多工夫啊,大大滴晋升了咱们的性能

哈哈哈, 是的, 多线程会大大滴晋升性能, 然而 线程不可能独立存在, 它是由过程来启动治理的, 那过程是啥???

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

来看上面这张比照图:


从图中能够看到,线程是依附于过程的,而过程中应用多线程并行处理能晋升运算效率

总结来说吧, 过程和线程有如下四个特点:
1. 过程中的任意一个 线程 执行出错, 都会导致整个 过程 解体

2. 线程 之间共享 过程 中的数据

从上图能够看出,线程 1、线程 2、线程 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 浏览器将来倒退的方向, 这将是一个不断更新迭代的漫长过程, 也是咱们技术人员须要一直理解钻研的漫长过程

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

谢谢大家反对!!!

正文完
 0