00:00
下面呢,我们来看一下各位同学,我们来看一下另外一个概念叫构里面的斜程和构的主线程。这个地方有要有个对应关系了,这样确实不是特别好,不是特别好讲哈,因为这边概念现在叫的有点混乱,目前来说教的还比较混乱,你们如果说有兴趣你们看书,你们会发现在勾浪里面呢,它的概念没有像传统语言写的那么明确,比如说C语言,他说进程线程对吧?啊,它这边多了一个东西叫携程,为什么有携程呢?各位朋友,它是这样子的啊,我先说一下这个历史的原因,它这样子的。这个。首先大家都知道原先这个程序,其实最早最早的时候那个程序没有,没有什么并发和并行的概念,没有,根本就没有什么多和听都没听过,最早的时候呢,就是一个进程打天下就干一件事,后面发现这个进程。后面发现这个效率太低了,所以说这个程序专家,设计专家搞出一个线程,这样子呢,我们可以极大的发挥CPU的这个能力,因为硬件发展总是比软件怎么样发展快,大家都知道这点是一个定律,叫叫摩尔定律,什么玩意儿我忘了有有这么一个定律说法嘛,就是硬件发展的比这个软件发展快,事实也是如此,事实也是如此,后面发现这个进程效率有点低,怎么办呢?就搞出一个线程。
01:20
线程这个东西呢,虽然很好,的确解决了很多问题,就是说它至少能够做到一个并发了,但是又来一个新的问题,什么呢?现城这个还是比较吃资源,也就是说它虽然是一个轻量级的进程,但是呢,它仍然是也是比较吃资源的,所以所以吃资源指的是占用CPU和内存还是比较多。啊,还是比较多,因为他有些一帮还是物理态的比比较笨拙,于是乎go语言的设计者就是听汤普森这帮这帮兄这帮哥们,他们想,诶,现在最大的问题就是要解决两个问题,第一个要解决能不能让我们的这个CPU。
02:01
全部都参与工作,他要解决第一个问题是我的CPU,假如有八核,我能把我的任务全部分配下去,八个同时干。啊,这样子很爽嘛,这是第一件事情,第二件事情他还想,诶,我说你这个县城虽然好,但是。还是有点重,于是他在底层呢做了些优化,就他把这个呢,完全做成一种叫叫做逻辑态的,他做了很多优化的东西啊,这个有兴趣我们再去分析它的底层,他做了很多在算法上做了一些优化,编译器做一些优化,做成逻辑态,那后逻辑态过后呢,这个线程就变得更轻巧了,就变得更轻了,更他说从它效率上都占在这个CPU啊,包括它的这个,包括它的这个这个池的内存呢更小了,因为它可以在这个线程集成之间,他他能够做到一些资源的共享。其实底层就做优化,那做优化肯定就是最核心的东西了,好那么他就搞了一个什么呢,他说诶干脆这样子,我我提一个新的东西叫什么呢?叫携程。叫携程,所以你看我这写了一句话,携程可以理解成是轻量级的线程。
03:06
那么这个时候就有概念了,又提出一个叫构的主线程。好,这个的主先是是什么呢。我提几个概念啊,有程序员直接把这个主线程就叫线程,所以说我在讲课的时候,我可能会这样说,诶,这个线程里面跑了多少个携程。啊,那这你提到这个线程就是主线程,那么这个主线程从这个从我们前面讲的这个概念上来看呢,这个主线程有点类似于像我们传统语言的进程。啊,就是叫法不一样而已,啊,叫法不一样,所以说你看我这两个主线程,有的程序员直接叫线程,也可以理解成就是进程。那有时候有时候面试问你,哎,问你go里面有没有进程,这废话,没有进程能跑起来了,但是呢,就是有些程序员他会他会这样说,我们跑了一个主线程,主线程里面有多少个携程,不要认为没有进程啊,没有哪个程序说没有进程。
04:01
没进程那是不可能的事,只是它的叫法发生了一点变化,明白好,那么在一个线程上,如果我再说一个线程的话,你就可以列式主线程或者或者是进程了,在一个线程上呢,我们可以起很多的斜程。你可以这样理解,斜程是轻量级的线程,那么它的示意图就发生了这样一个变化,各位同学,它示意图呢,我们可以理解成这样一个概念啊,注意听你可以这样这样理解,你可以这样理解,在构中呢,我们可以这样理解说,我这里有一个线程啊,当然是主线程的啊,是主线程。这个主线程,这是我们的构的一个主线程,在这个勾的主线层里边呢,我们可以跑很多的这个斜程。啊,所以说这个叫法上有一点稍稍上有一点变化,但是本质上没有什么太大变化,叫叫携程,携程呢,说白了就是我们所说的gro。And,叫携程好,我有,我可以有几个携程呢?各位同学啊,在go里面可以轻轻松松的起上万个携程,轻轻松松的起上万个学生,而且还非常的稳定。
05:12
这个不得不服啊,这个不得不服,在这点呢,我我们必须要服气,就他这个主线层里面可以跑很多很多的携程。啊,所以说有这个携程对吧?啊,当然你不要跟那个携程搞在一起了,有个搞笑的笑话吗?说哎,你知道携程是什么呢?我知道携程是专门做旅游的啊,那你写打错了啊这个概念。可以写很多,理论上来说呢,起上万个都没问题,因为这个携程它做了优化了他的,他可以把这个就是他原先是在这个就是编译器,它是在原先这个线程里面有很多可以共享的东西,整个直接拿过来给这个携程共享了,说携程变得更什么呢?更轻了,跑的更稳健,说它的示意图你可以这样去理解啊,可以这样去理解好了,那理解这个完了过后呢,各位同学,那么我们就来看一下。
06:03
把这个再做一个总结啊,待会马上就走案例了,来看这里啊,主线程里面可以跑很多的携程啊,携程呢,你可以理解是轻量级的线程,这个是底编译器做了优化了,这是编译器做的底层优化。编译器做优化,做优化。好,还有一点够的,斜生的特点必须记住,一定会有面试官问你。这个绝对跑不了啊,如果你你将来做这个做面试,这个go程序员,或者是你做区块链,肯定有人会问你携携程的特点是不用打的太多,就打四点就行了,第一点有独立的占空间。也就是说,也就是说一旦开启一个携程。他们的数据空间是独立的,也就说不打架。不打架,就跟我们以前讲那个站一样,他数据是独立的,当然。它也有共享的东西,这是第一点,第二共享程序的堆空间,它也可以去共享一个堆的空间,第三点调度由程序控用用户控制,注意啊,我们为什么单独提一下调度由程序控制,因为这个携程的开启。
07:09
还有这个携程的终止完全是有可以由这个程序员去控制的啊,程序员控制的啊,呃,但是进程是没办法做到的,就这个你没没办法控制啊,说老师这个我能不能控制这个不行,这个进程这个级别你是控制不了的,就是他什么时候吊起来你控制不了,说老师我双击一下它吊起来是我控制了吗?不是这样子的啊。实际上是你双击过后。他把它分配到哪里,什么时候跑起来,是靠操作系统来玩的,对吧,你运行运行运行运行起来还还不一回事呢,对吧,所以说这个呢,这个我们我们重点来说还是携程可以提成是用户调度的,可以自己在程序里面直接去去你你你拿写写个程序员,你双击的时候只是一个动作,你能在程序里面去调,对吧,还有一个呢,就携程呢,可以理解成是轻量级的线程,把这四点给它打上来。
08:02
我觉得就可以了啊,你也不用说的太多,有时候有时候说的太多吧,反而录取有时候这样子,诶你跟别人聊天是吧,哎,我这个。你怎么说这个有钱呢,是吧,你你比如说你去交一个女朋友,那女朋友问你,她她很想,其实你你用两个方法去表示,你你比较有钱,你直接跟他告诉他说我有1000万,显得很没档次,你这样说吗?哎,我早上起来的时候。我早上起来的时候,我这个我二姐在我们楼上四楼叫我啊,我们四楼叫我,中午吃饭的时候,我妈在一楼叫我们在吃饭,对吧,然后就表示你们至少有四层楼啊,你们楼房有四层啊,人家说诶这个低调有内涵,你要表示你的房子呢,你说房子是不是坐落在偏远地方,你说哎呀,吵死了我们,我们旁边那个地铁声音太响了啊。你的房子在地铁附近,比较当道是吧,一下就开始又有钱,当时还很低调对吧,还很低调,所以有时候呢,那个说话有技巧,有时候真的是这样子啊,你们不相信,你们去问这个小夏还要问这个本金,有时候面试呢,不用说的特别多,简洁干脆就行了,你说太多吧,觉得你多说啊,你就告诉四点完了啊,如果再问到再具体详细详细解释就行。好,这是我给大家讲的斜程和主线程的一个介绍,包括它的示意图,来各位朋友整理一下板书,好,下面就直接写代码了啊,讲完了原理讲完过后,代码就大声的来了啊。
09:26
是党参页面怎么没写代码呢,不是不写代码,后面全是代码啊,后面全是代码,因为你基本的原理你你搞不懂,你你说实话这个档次比较低的啊,档次比较低,理论的东西呢,我觉得还是还是得搞一搞啊。别人的说,哎,我全部都知道怎么操作,特别像一个程序员对吧,哎,告诉你别问我为什么,我给你干是吧?啊这些东西这档次有点低啊,档次有点低,好这是携程刚才老师讲的携程的四个特点,第一个有独立的占空间啊,共享程序的对应空间可以对应共享,对空间调度可以用程序员来控制,就什么时候开启我们可以控制,最后有个简单的示意图。
10:08
就是这个这个一个示意图吧,一个示意图没问题。好的,我把它放到这里,然后呢,我把这个示意图给各位朋友粘贴复制到咱们的笔记里面去,什么示意图啊。就刚才画了这么一个示意图,对不对,诶简单理解一下。简单理解斜程,OK,好,我把它放到笔记里面去,好,同学们那关于这个叫构的斜程和主线程,我们先介绍这里。
我来说两句