00:00
哎,这呢是咱们讲的这个程序,呃,进程线程啊三个概念啊,然后后边呢,我们再来说一下这个,呃,一个呢叫单核CPU和多核CPU啊,一及呢叫并行并发啊这个的概念的理解,呃,这个以前的话呢,这应该是零几年了哈,那个时候咱们说这个CPU的话呢,都是单核的啊,后来呢,那时候突然出来一个说,诶CP呢还可以多核啊,当然一下子感觉很神奇是吧,就说一个人呢,原来只有一个大脑啊,突然一下子说你可以有个双大脑了是吧?嗯,就一点这个意思一样啊,那很显然呢,我们说到单核相较于多核来讲,或者多核相较于单核来讲,那肯定呢,嗯,CPU多了啊,这个核多了,那同时执行的这个程序呢,诶同时运算的这个程序呢,也更多一些,哎,这块呢,我们因为现在涉及到多个线程了,咱们这块呢,又把这个概念呢,也给大家说一下啊,首先呢,咱们针对于这个单核CPU来讲啊,单核CPU那就只有一个核,意味着呢,就只有这样的一个核能够用来进行数据的处理。
01:00
比啊,如果是一个单核CPU,我们说呢,实际上它是一种假的多线程啊,咱们在这个,呃,这个多核CPU出来之前,咱们这个Windows系统,那肯定那时候也早都有了,那时候呢,如果大家你去看一下这个任务管理器,你照样的也是可以看到咱们这个Windows是支持多进程的,哎,咱们有这么多的进程同时呢都在执行。就像我现在这个电脑当中,大家呢,同时可以看到我这个PPT打开着呢,我这个录课呢也录着呢,屏幕还给大家也播过去了,然后在我的这个开发环境呢,也都打开着呢,相当于我这好几个进程都同时运行着,但是以前的时候呢,诶,我们这可能就只有一个CPU,那你这一个CPU呢,相当于同时做了好多事情啊,你都是多个线程啊,多个进程了,那肯定也是多个线程的嘛,最起码一个进程你都有一个程了,是吧?啊那就是对于原来来讲啊,本身我们这个CPU呢,它只能同个时间只能做一一个事儿,因为你就这一个人嘛。
02:00
相当于一个人一样啊,但是呢,我们能够看到说,诶他怎么看似好像同时执行了多个任务呢,哎,这就相当于它是一种假的多线程啊,那简单来说呢,就是相当于这是一个核啊,有好多的这个线程过来,都希望他去执行,那么这个CPU怎么处理呢?CPU呢,就是诶给你执行一段时间,然后给你执行一段时间,然后给你执一段时间,然后执行完了以后呢,回过来我再分配一点时间呢,给你去执行,给你执行,给你执行。啊,因为呢,我们这个CPU呢,它的这个主频啊太高了,就是它虽然说同一个事情,呃,这个单核的啊,同一个时间段之内只能做一个事儿,但是它做的速度太快了,就像说一个厨师在后台,后台这个炒菜一样啊,就一个厨师,但是呢,有好多客人,好多桌的客人,他这块呢炒着这个,然后这块呢,炒的时候呢,他又开始炒那个菜,几个菜呢,同时都做着呢,他呢就是很熟练了啊,同时切换着去做各个菜,让你感觉到后台好像有好几个厨师,每一个呢,呃都呃,就是每一个你你要做的菜呢,每一桌他都跟你去,哎吵着呢是吧,哎有这样的一个感觉啊,这另又举了一个例子,就好比是这个收费站的这个工作人员一样。
03:12
嗯,那我们有好多辆车都需要呢,经过这个收费站,那每一辆车呢,就好比是一个县城一样,嗯,收费站的话呢,需要这个收费是吧?然后呢,如果呢,这块来了一个人,这个人的话呢,他不想交钱啊,不想交钱呢,这块这个收费人员就没有说在这块去等着他啊,等着他呢,导致其他这个县城都没法工作了,这个时候我就把它挂起,哎相当于呢,就把它挂起,就晾着它是吧,哎这块呢,他在放在一边,你你先等一等是吧,然后后边这个车过来先去交费,哎让你感觉到好像说诶这个同一个时间,这个工作人员可以处理好多这个这个县程一样,哎等他这个想明白了啊,那这块呢再去交钱,就相当于是我这CPU呢处理这个线程呢,处理了一段时间以后,这里边还有这么多线程需要执行呢,哎,我就先让你挂起一段时间,哎,我这块呢,先去执行它,哎执行一段时间再挂起,再执行它,因为呢,这个主频太高了,让大家感觉像是同个时间做多个事儿啊,像是在,呃,这个像是在什么呀,像是在这个并行的去执。
04:13
执行一下啊。哎,这是这个意思,那咱们现在呢,有了这个多核CPU了啊,有了多核了,那一个核呢,可以一个同一个时间做,呃,这个这个只能做一个事儿,那你就多核了,那就通过时间可以做多个事儿了,哎,这个时候呢,相当于就可以更好的发挥这个多线程的一个效率啊,那现在的话呢,我们这个服务器啊,都是多核的啊,那就可以同个时间处理的这个业务就越来越多啊,对于我们这个手机来讲,现在呢,也都讲啊多核的CPU啊,它的有的有的都达到八核了,都是吧,当然了,它这个八核的话呢,它不是说每一个CPU的这个主频都一样,有的主频呢比较高,有的主频比较低,对于呢,日常的一些操作呢,不需要我们这个很耗费这个CPU资源的,我们就用这个呃,主频比较低的这个CPU,这个核去运算,这样的话呢,也比较省电啊,当你这个玩大型游戏的时候呢,这个我就同时启动这个它这个主频比较高的这个盒来帮你去加载这个游戏啊,不会出现这个卡顿的情况,当然这个时候呢,意味着就更耗电了,就啊。
05:15
这个可能手机也会发热啊,那正常的一些,这个待机的状态呢,就是用这种频率比较低的这个盒去维护就可以了啊,就这样一些情况啊,那么对于我们Java应用程序来讲啊,啊这块提到这样个事情,至少的话呢,我们会启动三个线程啊,第一个呢,就是咱们的main方法对应的这叫主线程啊,第二个的话呢,就是垃圾回收线程,咱们说呢,咱们程序在执行的过程当中,比如我们这是一个呃,Main方法,咱们这个main方法当中,比如我又调了另外一个方法啊,比如叫M1这个方法啊,那M1这个方法呢,在这个方法内部啊,它定义了一个变量,那就意味着我出了这个方法之后呢,这个变量其实就相当于失效了,但是我们这个没方法呢,还在往下执行,那你在这个过程当中,你会发现我们没方法,这个线程执行过程当中呢,这个M1里边的一些变量呢,已经不能再用了啊,垃圾回收器要回收了,这个时候的回收这个事儿肯定不是主先生帮你做的了。
06:11
因为主线程还在执行下面的程序啊,这呢其实是另外一个垃圾回收的线程,哎,我们把这个不用的这些数据呢,就给你清空了啊,那如果说我们程序出现异常的话呢,还有一个专门来这个处理异常的这样的一个线程。啊,这其实呢,就是说我们Java程序呢,至少在运行的过程当中会启动三个线程,当然了,你要是程序出现异常了,这个线程抛出来以后呢,它也会影响我们主线上的执行,你要没有处理的话呢,主线上就也停了。哎,就这个意思,好,下面一个概念呢,叫做并行与并发,哎这两个概念呢,需要大家啊了解一下,首先叫并行,就是多个CPU,哎,同时执行多个任务,哎就好比多个人同时做不同的事,这个应该很好理解吧,啊,这是一个CPU啊,这是一个核,这是一个核,这是一个核,然后这个呢,核在执行这个任务,这个在执行这个任务,这个在执行这个任务啊这就相当于一个呃县城就相当于一个人一样啊,哎,他在做不同的事,不同的人做不同的事儿,这呢叫做并行。
07:15
啊,就像你这个大家出去呢,你看这个路上的这个车一样啊,有好几条这个车道,哎,每一条车道里边这个车呢,自己开自己的,这叫并行啊对应呢,还有一个概念叫做并发,并发是说一个CPU啊,一个CPU呢啊,它采用这种时间片的这种策略去切换不同的任务啊一个CPU啊它呢同时呢,可能呃,这个我们所谓的同时呢,应该加上一个引号了哈,因为我们看似是同时的,对,其实呢,它是快速的去切换这几个不同的线程了啊不同的任务,哎我这一个CPU呢,诶这个去同时切换好几个任务,然后这个时候呢,我们把这种情况呢,叫做并发,相当于是不是一个人,呃或者这个我们叫多个人做同一件事儿,就是这里边呢,多个人就相当于多个线程同时在这里边去执行一个事儿啊,同时做一个事儿,你可以这样理解成叫并发,比如说呢,像秒杀啊,秒杀的话呢,比如说我们这。
08:16
呃,有一个iPhone啊,IPhone呢这个奖励啊,这个一共是100台,大家呢,同时啊,在这个时间点真正去秒杀,相当于多个人啊,这个可能这个几千人,几万人,甚至更多的人啊,同一个时间涌进来,就为了抢这100台这个iPhone手机啊,那这个秒杀功能就相当于是一个并发啊,一块儿来做这一个事儿,嗯,或者再举一个场景,就好比是大家去打篮球的时候啊,如果呢,你看到有好几个篮球场啊,大家每一波人,人家是玩自己的篮球,那就相当于是大家都在并行啊,你玩你的,我玩我的,大家是,诶不同的队啊,玩不同的这个篮球,然后呢,你要是这一波这个队当中啊,一个求生上去,一堆人去抢啊,那大家呢,就是并发啊,就这样一个概念啊成啊这块呢,大家对这个并行并发啊,单核CPUC呃,多核CPU的这样一个运行执行啊有一个了解。
我来说两句