前端知识框架构建一:前端中的进程和线程

143 阅读4分钟

在这里主要是写前端的知识,所以这里的进程和线程就主要写一些JS中的进程和线程了。

课本上的知识点就是:

  • 进程:系统资源分配的最小单位
  • 线程:CPU调度的最小单位

但是这样说还是很抽象,接下来就具体的说说

人不能一心二用

在我学习计算机知识的时候,我总是将操作系统想象成一个人的大脑,而浏览器也算是一个人的大脑, 在我们日常生活中,脑子中总会想各种各样的事。

打个比方,我在踢球的时候,就会想我该往左晃还是右晃,才能将人过掉,但是在我面对对手的时候,我突然闻到了KFC的味道,好香,然后我就开始想晚上要不要吃KFC。

就在这时 ,我的动作变得迟钝了,结果球被断了,我又被队友骂了。

这种例子我想在生活中会经常出现,人的大脑很强大,但是强大归强大,也有一个问题:

  • 一次只能处理一件事情

也就是一心不能二用。

在计算机中也是如此,所有的程序,在底层都会变成二进制,在CPU中进行计算,而同一时间,就只能进行一次的计算,所以计算机和人脑一样,一次只能处理一件事。

但是我们也经常能边打游戏边听歌呀,这又是咋回事?

并行处理

至于上一个问题,计算器中出现了一个东西,叫做并行处理,当了解了并行处理,进程和线程就很好去理解了。

  • 并行处理,就是”同一时间去处理多个事件“

举个生活中的例子,当我们边看电视边写作业的时候,其实也是我们的大脑在对我们处理的任务进行并行处理。

我们在第一秒低头看题目。(看懂题目了)(思路一)

第二秒抬头看钢铁侠变身。(变身完了)(思路二)

第三秒低头把刚刚的题目写完。(1+1=2)(思路一)

这样来看,是吧,我们好像确实可以做到一心二用,看电视的时候也可以写作业。

这其实就是并行操作,虽然我们同一时间做了两件事,但实际上,我们也只是在不同的事件单位上去做了不同的事,结合在一起,也就是我们在思路一和思路二中进行了一个切换,才看起来像是我们一心二用。

线程

这里的线程,就可以理解为我们刚刚所说的思路一和思路二。

浏览器中有很多的线程(HTTP请求线程,JS线程...),就像我们有很多事可以处理(看电视,玩手机,写作业)。

浏览器在一个时间段中只能做一个事情,但是可以不用等全部做完才做下一个,这里有一个叫做时间轮转片算法,就是以一个很快的间隔去切换任务,达到多任务的效果。这就是多线程。

至于单线程,单线程有挺多不太好的地方,这里就一笔带过了,大部分程序现在都是用多线程来做,这样的并行处理可以大大提升性能。

进程

线程不是单独存在的,他是依赖于进程的,一个进程就是一个程序的运行实例,就像我们的QQ,他在操作系统中就是属于一个进程。

当我们打开QQ时,操作系统为QQ提供了一个进程,给他一个空间让他运行,在QQ打开的时候,这个进程又会去申请一些线程来做一些具体的任务,比如把网络请求交给网络线程(我瞎掰的),每个不同的线程去做每个不同的事情。但是他们都是属于QQ这个进程的。

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/da30f54e6e484ca9bf5a772493567168~tplv-k3u1fbpfcp-zoom-1.image

在网上找了张图,长这样。

所以说,线程是属于进程的,而进程中可以又很多的线程,做不同的事。

特性

  1. 线程间共享数据

    都是在同一个进程中,就可以用到一些公共的数据

  2. 进程关闭后,操作系统会回收该进程所占用的内存

  3. 进程间相互隔离

    进程中的数据是不相通的,可以想想你的qq能访问到你微信的数据嘛,是不可能的

    如果要通信,就是要用到进程间通信IPC的机制了