在这里主要是写前端的知识,所以这里的进程和线程就主要写一些JS中的进程和线程了。
课本上的知识点就是:
- 进程:系统资源分配的最小单位
- 线程:CPU调度的最小单位
但是这样说还是很抽象,接下来就具体的说说
人不能一心二用
在我学习计算机知识的时候,我总是将操作系统想象成一个人的大脑,而浏览器也算是一个人的大脑, 在我们日常生活中,脑子中总会想各种各样的事。
打个比方,我在踢球的时候,就会想我该往左晃还是右晃,才能将人过掉,但是在我面对对手的时候,我突然闻到了KFC的味道,好香,然后我就开始想晚上要不要吃KFC。
就在这时 ,我的动作变得迟钝了,结果球被断了,我又被队友骂了。
这种例子我想在生活中会经常出现,人的大脑很强大,但是强大归强大,也有一个问题:
- 一次只能处理一件事情
也就是一心不能二用。
在计算机中也是如此,所有的程序,在底层都会变成二进制,在CPU中进行计算,而同一时间,就只能进行一次的计算,所以计算机和人脑一样,一次只能处理一件事。
但是我们也经常能边打游戏边听歌呀,这又是咋回事?
并行处理
至于上一个问题,计算器中出现了一个东西,叫做并行处理,当了解了并行处理,进程和线程就很好去理解了。
- 并行处理,就是”同一时间去处理多个事件“
举个生活中的例子,当我们边看电视边写作业的时候,其实也是我们的大脑在对我们处理的任务进行并行处理。
我们在第一秒低头看题目。(看懂题目了)(思路一)
第二秒抬头看钢铁侠变身。(变身完了)(思路二)
第三秒低头把刚刚的题目写完。(1+1=2)(思路一)
这样来看,是吧,我们好像确实可以做到一心二用,看电视的时候也可以写作业。
这其实就是并行操作,虽然我们同一时间做了两件事,但实际上,我们也只是在不同的事件单位上去做了不同的事,结合在一起,也就是我们在思路一和思路二中进行了一个切换,才看起来像是我们一心二用。
线程
这里的线程,就可以理解为我们刚刚所说的思路一和思路二。
浏览器中有很多的线程(HTTP请求线程,JS线程...),就像我们有很多事可以处理(看电视,玩手机,写作业)。
浏览器在一个时间段中只能做一个事情,但是可以不用等全部做完才做下一个,这里有一个叫做时间轮转片算法,就是以一个很快的间隔去切换任务,达到多任务的效果。这就是多线程。
至于单线程,单线程有挺多不太好的地方,这里就一笔带过了,大部分程序现在都是用多线程来做,这样的并行处理可以大大提升性能。
进程
线程不是单独存在的,他是依赖于进程的,一个进程就是一个程序的运行实例,就像我们的QQ,他在操作系统中就是属于一个进程。
当我们打开QQ时,操作系统为QQ提供了一个进程,给他一个空间让他运行,在QQ打开的时候,这个进程又会去申请一些线程来做一些具体的任务,比如把网络请求交给网络线程(我瞎掰的),每个不同的线程去做每个不同的事情。但是他们都是属于QQ这个进程的。

在网上找了张图,长这样。
所以说,线程是属于进程的,而进程中可以又很多的线程,做不同的事。
特性
-
线程间共享数据
都是在同一个进程中,就可以用到一些公共的数据
-
进程关闭后,操作系统会回收该进程所占用的内存
-
进程间相互隔离
进程中的数据是不相通的,可以想想你的qq能访问到你微信的数据嘛,是不可能的
如果要通信,就是要用到进程间通信IPC的机制了