00:00
好,下面我们来看一下我们今天还有最后一个点,现行机制与世界机制啊,看起来还挺高大上。啊,先有一些相关的一些概念需要跟大家说一说,首先说的第一个概念是进程与线程,那什么是进程,什么是线程呢?进程,这个大家接触过。我什么时候接触网?对。这个里面你看呢,这不就说进程吗?看到吗,这个进程怎么启动的,是不是程序运行就启动了进程,对,那进程就跟程序运行有关系。进程呢,就是程序的一次运行,它占有了一片什么呢?独有的内存空间,也就是说什么意思啊,OK,大家看到啊,这里面譬如说Chrome,它这个程序启动是不是占有一个他的空间,对不?而我们再来一个啊,差慢啊,这个思维导图,它是不是也占用了自己的内存空间,它们相互影响嘛,相互是独立的,知道吧。
01:28
就是各个应用程序它们之间的内存空间是相互独立的啊,是一个程序是不能轻易的去访问到另外一个程序的内存部件的。因为他们的内存空间是相互独立的。啊,我们可以用任务管理器,是不是查看能懂吧,这个应该能懂啊,但现成呢,大家可能啊,基本上没怎么接触过,也不太好理解一点。啊,县城呢,是进程内的一个概念。
02:03
是进程内的一个点,他直接说了用语言来表达,就是进程内一个独立的执行单元,其实这个就不好理解,因为说的太抽象单元。是一大R大元不是那种意思是吧?啊,它是一个整体啊,说白了一个进程里面可以有什么呢?多个线程。有多个整体啊,多个相互独立的整体啊,是程序执行的一个完整的流程啊,什么是CPU最小的调度单元,这些话呢,估计现在大家都不好理解,我们再往下看一看,大家就能好理解一些,我们看一下图,图能说的更清楚一点。说什么意思呢?首先我们的应用程序是不是存储在硬盘上面了?对吧,那接着我们是不是将程序A或者程序B给它启动。能看到吧,那程序一启动是不是就会占就会启动它所对应的一个进程呢?那这个地方AA和B有没有区别。
03:09
有区别,那个B它只有对应什么一个进程,而A呢,三个进程,有人说一个程序还能搞三个进程吗?能不能能。啊,Chrome浏览器就在哪。大家看,我再来打开一个页面。啊,随便打开啊。是不是我又打开一个页面了,来现在。我重新的看一下啊。诶,他不用看下面的这个,这里好像还有很多没死的,看到了吗?它是一个,嗯,那个说明了一个什么事的,说明了我们的pro浏览器,它程序启动,它可以启动什么多个进程,那一般我们这样的程序成为什么样的程序了,多进程的程序。
04:10
或者多进程的应用可以吧,嗯,那是不是所有。程序都这样的。不是,这里面看得出来,有的程序是多进程的,而有的程序呢,是什么单进程的。能懂吧,嗯,好,下面在一个进程里面,它又可以分。是不是这一个进程一是不是只有一个线程,而这一个进程二呢?是不是有三个线程,下面呢,是不是都只有一个,能不能看出来?啊,OK,那好了。那如果说我一个进程里面可以有多个线程运行,那说明这一个程序是一个什么呢?多线程的程序。
05:05
啊,多线程的程序,那如果我只能有一个线程呢,那我就是单线程的,记住了,说的是一个进程里面只有一个线程。那是单线程,好问大家,我一个应用程序,我启动两个进程。那每个进程里面都有一个线程,请问这个程序是单线程的,是多线程,单线程这个单线程多线程是局限在一个进程内。好了,说完这个整体概念,下面我们继续往下说一些相关知识,大家能帮助大家理解啊。我们应用程序的代码必须运行在某个进程的某个什么线程上,也就是说我这个程序启动以后,我一个线程都没有,能运行代码吗?不能。
06:03
啊,至少得有一个县城啊。那怎么样保证至少有一个线程呢?它这里有一个是一个进程中至少有一个运行的线线程,我们把它称为什么呢?主线程,而这个主线程是怎么创建的呢?大家看进程启动后有概念叫什么自动创建,因为它要运行代码。懂吗?它启动了进程,它马上运行代码,在运行代码之前,他得先准备一个什么,是不是主线程。啊,那既然有主线程,那必然会有什么子线程或者叫分线程。主分嘛,能不能看懂啊,我觉得叫分线程可能更好一些啊,你叫子没关系啊,有很多人叫子线程啊。好,一个进程中可以运行,可以同时运行多个线程,可以吧,那我们看可以吗?我们会说这个程序是什么多线程运行的。
07:07
那一个进程内的数据可以供其中多个线程直接共享。和多个进程之间的数据了。是不能直接共享的,前面我们说过,进程间的内存是什么?有一个概念叫什么独立的,独立的那就相互隔离的呗,既然相互隔离的嘛,那就不能直接访问,能不能懂。啊,OK,还有一个概念。啊,这概念大家适当的要了解一下,这个概念叫线程词,Th pool,线程词词是用来干嘛的,是装水的啊,但肯定不是装水,那那叫水池是吧?OK,那现成池装什么呢?那装现成的呗,说白了,现成就是现实直接的容器。
08:01
能不懂啊,磁器的容器它用来干嘛呢?保存多个线程对象的容器,那为什么要保存呢?可以反复的用啊,可以反复用,前面我不说过了吗?程序并行运行在某一个进程的某一个什么线程上,那如果我用一个线程值来保存多个线程对象,那你就想啊,这个好处是什么好处?譬如说我现在要某一个程序要执行,我可以必须先拿出一个线程来去执行某段程序,好执行完了以后呢,我是要将这个线程变成垃圾对象,居然的回收呢,还是怎么着呢,是不是又给他放回去,这样是为了什么?很简单。不复用吗?能不能懂,大家能懂吧,是一种复用,其实跟我们准备一个函数定义函数能够复用它是一个类似的道理。
09:05
能不能理解啊,大概可以有一个理解啊,啊,这里面还有一些相关问题。啊,首先呢,我们来看一下何为多进程啊,何为多线程,这个好理解,刚才说过了是吧?啊多进程就是一个应用程序,可以同时启动什么多个时间去运行啊下面一个什么叫多线程呢?在一个进程内同时有什么多个线程运行。啊,这个要难懂,下面一个我们要现在比较一下啊,单线程和多线程运行。它们有什么样的区别,什么样多个线程运行啊,其实说白了,我这里有两个线程运行,我可以处理程序A,代码A,也可以处理代码B啊,甚至可以同时运行,大家知道我们现在不多核吗?
10:01
多核一个什么概念,是不是多核CPU相当于那是不是同时可以,譬如说我双核的,也别说多核的,双核的,我是不是在同一个时间点,同一个时刻可以同时做两件事情。是不是假设我是个单线的运行的,大家想浪不浪费,我是个单线的运行的,说白了我自己就只干一件事情,同时一个时间点只干一件事情,那另外一个合是不是相当于休息啊,就完全不干活,能懂吗?这不可能干活。能不能理解,那如果是多线程的,我有两个线程,那我这两个线程在同一个时刻能不能同时执行,能。是可以执行的。啊,但是啊,并不是说多线程就没有缺点,它的优点是能有效的提高什么CPU的利用率啊,缺点是什么呢?哎,这个地方要说首先我创建多线程呢,它是要需要开销的啊,看也是说需要费功夫的。
11:09
不是说平白无故就有了。这一个啊,OK,多个线程并不代表他们一定就同时执行啊,譬如说假设我是单核的。我能不能创建多个线程也能,但是你就得想啊,我是单核的,我创建两个线程,它在同一个时刻是不是只能执行某一个线程?那另外线程呢,是不是暂停了,那暂停的话,那不可能说好,假设我要执行一秒钟,我这个也要执行一秒钟,那难道是把这一秒钟执行完了以后再执行它吗。不是的,那可不是他不会这么做的,那这么做的话,那就不行了,他怎么执行了,你执行慧慧好暂停,我来执行会问好,接着又暂停啊,下面暂停接着执行它。
12:01
能懂我意思不啊,那也就是说它要在两个线程之间是不是跳转运行,能懂吧?啊,这个东西叫线程间切换。就是我执行一下线程一,一会又提一下线程,线程二执行线程二,一会呢,我要执行线程一啊这样的执行方式。你不能说我完全把现在意义执行完了以后再执行限差C就不会这么做,因为这么做是公平的。啊,这个时候你在跳转的过程中,那就是需要有开销啊。嗯,好,这个不太好懂,这个大家,呃,大家现在可以不用管它什么死锁,什么状态同步问题,这个对大家来说啊,不太重要,有点难度。啊,下面来看单线程的优点,单线程的优点很简单,就是你编程啊,是顺序,它的顺序执行了就说白了,单线的不就从上往下执行吗。
13:05
就一条线嘛,这是一条线执行,这个时候编码的时候比较比较简单,那如果是多线程的程序是编码要复杂一些啊,编码要复杂一些。那缺点那咱大这个应该知道吧,销量低一点是吧。这个呢,大家稍微有个了解啊,下面GS是单线程的还是多线程的呢啊,GS是单线的运行的,你说老师这你这搞的,刚才还说单单线的有问题了,你现在又又说你GS是单线的运警啊。OK,这个啊得说一下,其实最先。啊,GS是单线的运行的,最先我们GS设计出来,诶,我们GS设计出来,他其实干的事情非常简单,大家知道GS最先设计来是干嘛的。啊,就做一些什么小广告啊,弹一些什么框啊,是吧,再做一个简单的表达验证最具先就是说白了,譬如说以前网速特别慢,你懂吧,那我要提交一个数据,提交一个表单到服务器那边去,譬如说假设我注册了一个用户名吧。
14:15
有不可能有吧,你但是你的用户名他是不是有些要求的。或者说你的用户名是不是不能重复的,能理解不?譬如说我用户名假设只能有六个字符,可不可能,可能啊,这个要求必须得有六个字符,那关键是要没有GS的话,你得想你是不是得提交到服务器,服务器来检查。对吧,那这个事情是不是完全可以在浏览器上就可以检查。是吧,有人说那在佛教检查,在浏览器的检查有区别吗?区别太大了。啊,假设啊,我们有1000个人需要去注册用户。
15:02
是不是他们的目标是不是都是同一个服系啊?是吗?那我们如果在服务箱进行检查的话,那服务器是不是要处理1000个请求?处理一个千需要去检查这这个东西啊,懂不懂,复习压力是不是增大。还有一个事情就是对于用户来说,他填了一个用户名,好,假设输了一个ABC。啊,接着提交过去,那时候网速特别慢,提交过去啊,怎么提交过去慢点啊,就过来了,等了半天说各们你的用户名好像太短了。你说这用户哪算了,你说就一个,你早不告诉我,还等了半天,你说我的用户名太短了。你就不能快一点吗?人说怎么快啊,那网速加快呗,网速它网速一下子快起来嘛,不能嘛,那就选折了嘛,对不对,选择就是你在浏览器端是吧,能不能设计一种语言,能不能用语言直接就能检查了,它不就是判断那个长度是不是嘛,六个长度吗。
16:16
啊,GS就是在这样的一种需求下面自然就产生了。最先它是运行在浏览器上的一些,我们说它它不叫脚本啊,什么叫脚本。为什么叫脚本?脚本是啥意思?脚本是个啥来着?脚是什么意思?就是这个脚料。知道调料是什么吗?啊下角料下角是啥呢?就是边边角角可有可无,可有可无的东西,能懂吧,没有你能不能过能过。也就我没有这个检查是不是也可以,但有检查是不是舒服一点。是这么回事。所以开始最先设计的GS是单线程运行的。
17:05
而且一直以来好像也没什么太大问题啊,后来发现吧啊,这个单线的运行有时候也会有弊端。也会有弊端,手臂端呢,假设啊,假设我这个地方有个页面,页面里面呢有个按钮,有个输入框,有个按钮,我要做一个特别长时间做一个做一个十秒的运算。这有可能吧,这也是有可能,只是情况不多而已,那你想啊,我一点这个按钮就开始计算,我是不是只有一个线程啊。那你想现在有什么问题,在我这个计算的过程中,我还能点,我还能操作吗这个页面。他死了,他就是一种一种他不断的在运行计算,没有时间管理,知道不,你的任何操作都是没有反应的。是吧,那这个时候就有一种需求了。
18:01
怎么样能够去解决这个问题呢?答案是怎么解决,你要把这个长时间的计算,想办法让他在哪个里面计算。分线程计算啦。能不能理解我再整一个线程,我把它长时间操作放到分线程,那我的主线程是不是空闲呢?那主线程是空闲的状态,它能不能响应用户的操作可以。啊,这个时候在H5的规范里面,我们后面就要选HTM5的规范,HTM5的规范并不仅仅是说就几个标签,它包含了HTML标签,新的HTM标签,也包含了一些CSS的一些样式,也包含了一些JS的新语法。H5并不是就是HTML的一个一些东西,包含这三个方面的一些新东西,而其中一个就是在H5里面有一个新的技术,它取名叫wi works。
19:08
外网说是吧,有网络work什么意思?Work什么意思,工人是吧?翻译成工人,那肯定是不行的,他叫工作者。啊工作者,那这个地方实际上啊,就是指的啊,这个地方S是不是代表多个工作者。那就是多线程。说白了,多线程主线程只有一个,要出现多线程,我得有什么线程分线程啊,要想出现多线程,必须有分线程才行,因为主线程就一个。你不可能说主线有两个,不可能主线程就一个,能懂吗?那能懂啊,也就是说白了,S5里面已经设计了来产启动分线性的语法,怎么样启动分线呢?等会后面再说啊,大家先了解一下。
20:07
啊,这是这一个,那下面还有一个浏览器是单线程运行的,还是多线程运行的,浏览器是多线程运行的,无论什么浏览器都是多线程运行,不可能只有一个线程,那只有一个线程,你想想看多恐怖。那浏览器能高效起来,好,下面一个浏览器是单进程的还是多进程的?有单进程,也有多进程。啊,多进程的,刚才我们看过了,有什么Chrome新版的IE已经是多进程的啊,而单进程的有FOX一直都是单进程,再一个老版的IE是单进程的,至于从哪个版本开始改,我还真就不能确定啊,这个不用大家去记,你知道最新版本的IE肯定是多技能好,OK,怎么样看刚才已经说过了是吧,啊,OK。
21:15
这个已经跟大家说过,就不用再说了,这里面呢,我们主要就跟大家去说了一些进程与线程的一些相关的概念啊。我觉得大家估计还是不是特别的理解,就是真的对他理解,因为大家在这方面用的少啊,等我慢慢学完,后面大家慢慢学的话,应该能更理解更好一点。这完全是概念性的,没有什么代码啊,等会我们再写一些代码。嗯。
我来说两句