00:00
那么刚才呢,咱们到缓冲区习刚就说完了,下来呢,我们继续说这个通道,我么通道呢,它实际上是不是就表示原节点和目标节节点的一个连接啊,对吧?我们说实际上呢,通道对吧,它是不负责进行传输的呀,而缓冲区数负责数据的存储啊,那么实际上之前呢,刚才咱们已经对通道呢,已经有所了解了,我们甚至于说你就可以把通道是不是理解为原来的流啊,因为这跟原来的流很类似,那是不是有点不一样啊,对吧?那么咱们接下来呢,在这个用操作系统的一个底层,对吧?就是按照这个计算机的原理,咱们再进一步的这个看一看通道和这个原来生那种流动方式到底有什么一个区别,那么这里呢,大家仅限于了解啊,仅限于了解,那么我们说首先了解一下通道,那么呢,我们可以通过叫做计算机原理的这个层面呢,稍微的对通道那做进一步的了解,那首先这一部分刚才咱们是不是说过了呀。
01:00
啊,不用再多说了,要我们说应用程序和磁盘之间实际上不能直接传输,是不是得通过这里来个copy复制啊,那么实际副能统说在我们的账化应用程序要记对算盘中的数据进行读写的时候呢,实际上应用程序是不是像计算机底层的那个,计算机底层是不是都有这种IO接口啊,我们实际上是不是调用人家底层接口的read或者是RA方法进行对于磁盘中数据的一个读写操作呀,那么我们说实际上最最最早期的这个操作系统,它就底层是一个什么情况呢?我说CPU,我们是不是称之为中央处理器啊,它们负责整个计算机的一个,我们称它为叫做计算机的一个大脑,它是负责计算机任务的一个分配啊,那么比如说我们说实际上计算机CPU对吧,我们发起一个同学请求,那CPU是负责进行一个运算,然后读取磁盘中的数据,然后把磁盘中数据交给内存。内存是负责运。
02:00
呢?那么最早期的操作系统是干什么呢?我说这些IO接口啊,全都是由CP独立负责的,也就是说当我们应用程序对这个操作系统底层计算机中进行一个标题的同学请求时,那么这些IO系统是不是都是由CPU独立负责呀?那这就意味着什么呢?这就意味着如果说这些IO接口由CPU独立负责,当我发起大量的读写请求时,那说是CPU被占用的,这个占用率非常的高,以至于这个CPU还能做其他的工作吗?这不能啊,因此我说,那么我说CPU一直被我的IO接口占用,那我说结果大家应该也可想而知了,那是不就是没有很好的利用这个CPU的利率啊,对吧?那它性能是不是也就会下降去完了是不就是CPU的处理能力是不是就会下降啊?那么于是到了后来,这个操作系统呢,就有所改进,改成什么?
03:00
情况呢,它呀,在内存和这些IL接口之间搞了一个叫做DMA,这个呢,我们称之为叫做直接存储器存储,那这种方式又是一个什么情况呢?我们这回当应用程序对这个操作系统对吧,发送一个读写请求时,那么首先呢,如果有这个在实现这个安系口发送读写请求,我们说这个DMA会向先向CPU申请权限,如果CCCPU这个给他权限以后,那么接下来我们说这些IO操作就全权由这个叫做DMA,我们称它为叫做叫做直接存储器吧,就CPU就交那个I,也就是输入输出操作了,全权交给这个DMA,让他来负责操作,那么这样的好处就在于CPU在进行同学请求的过程当中,CPU他是不是不需要干预啊,不需要干预就意味着什么呢?
04:00
是不是可以去完成其他任何他想做的事,那这个时候把这个图形请求是不是全权交给了DNA对吧?全权交给了直接存储B,让他在与内存之间直接进行一个交互,那么实际上在这里呢,我们说会有一个叫做DMA总线,这没问题吧,那我们说传统的数据传输方式实际上就是DMA是吧?也就我们所说的L流,也就是我们所的L流就是这种形式,那么但是呢,我们说这种DMA呢,它还有一个问题,什么问题呢?说如果说当我有应用程序,或者是非常大型的应用程序去发起一些大量的读写请求时,那么这个时候DMA是不是也会向CPU去申请资源呢?然后说去建立这个叫做DMA总线,至于什么叫D总线,咱们也不用管,反正就是在这里是建立很多个DMA总线呢,那么如果这个DMA总线过多呢,它最终就会造成一个叫做总线冲。
05:00
不同的问题。这明同明白对吧,那么说如果总线成除,那么它最终也会影响它的性能,有一些专业名词咱们是不用管的,就直接说道理数就可以,对吧,说如果有大型的,有个大型运行程序对吧,发送大量的图形请求给这个呃竞算基底层,那么这个时候呢,它这里会建立大量的是不是叫做DMA总线呢?对吧,造成总线中毒,最终是不是也会影响肾能呀,于是这种DMA到后边也有更新了,更新成了什么呢?更新成了通道的这种方式,当然DMA是不是也存在啊,对吧?然后呢,生效学为通过这种通道的方式说通道它有什么好呢?我们说通道它是一个完全独立的处理器。说什么叫做完全独立的处理器,我们的CPU,我们是不是称它为中央处理器,它是不是本身CU就是处理器啊?而现在的通道,它是一个完全独立的一个叫做处理器,专门用于IO操作的。
06:08
听明白了,它拥有自己的一套目率完全独立的一个处理器,听明白,当然,虽然它的处理器它也附属于CPU,它附属于CPU,但是呢,它相较原来的DMA,它是完全独立的一个处理器,专门用于IO操作,拥有一套自己的命令,明白领导,那也就意味着他说不需要,比如说你现在哪怕来了大量的IO请求的话,他还需要向CPU去申请吗?这不需要,他说完全独立的处理器了呀,只要当于用于IO操作了呗,那就跟CPU彻底的断绝关系了,对吧,说只需要有IO操作,是不是就通过图段就完事了呀?它拥有一套自己的用,拥有一套自己的传输方式,那这就是通道和原来DMA的一种区别。听懂吧,那含义放到实际,对于我们理解来的来看的话,实际上通道和原来的L流是不基本上没啥大区别,你看这两幅图是不是实际上也没什么大区别啊,但是我们说如果用通道的这种方式,你要是有一个大型的非常大型的应用程序,对吧?有大量的I请求化,那么可能通道相较于原来的那种方式可能性会略高,因为它的CPU利用率是不更高,就更能利用CPU的资源了,对吧,你连请求都不用了,直接通道处理,这它非常大了,对吧?所以说通道呢,实际上本质上和那个礼物原来的礼呢,本质上也没有太大的区别,对吧,都是做一个事情。
07:42
能通对吧,好了,那么这个呢,进一步了解了通道以后,接下来那是不是就是如何用通道负责是不是传输或者是连接啊,对吧,然后对缓冲区进行来推的数据传输,那么过来我们进一步试试说怎么操作,那么这个时候呢,我来个叫test channel是不是通道啊对吧,通道说通道,通道英文是不是叫做China啊对吧,他是干什么的呢?他是不是就是负责原节点和目标节点的连接呀,我们说你可以把它理解为铁路对吧,哈尔滨通向北京的是不是一条铁路啊,或者连接的对吧,都用于用于原节点与目标节点的一个连接,连接连接,然后呢,我们说在Java对吧,NIO中no中说主要针对于负责缓冲区中数据的一个传输啊对吧,在NIO中负。
08:43
负责缓冲区中数据的传输,因此我们说通道本身存数据吗?是库存的,对吧?我们说通道对吧?Channel channel呢,它本身是不存储任何数据的,因此我说它需要配合谁来使用啊,配合缓冲区进行操作,是不是采取啊,或者进行传输,它需要配合缓冲区才能完成这个传输,就像我们说铁路他自己也没有办法用它,是不是得配合火车呀,才能完成旅客的运输,是不运说对吧?那这就是通道和缓冲区,那么接下来我们再看,我们说,那么我说三角通说我们提不到哪些通道,对吧?我们说通道的一些主要实现类有哪些呢?对吧?我们说首先通道它整个都在这个叫做java.no.channels下是不是有个。
09:43
An,这个叫做接口啊,然后呢,它下边呢,有几个主要实现类,咱们就写主要的,中间可能还有一些细节咱们没写没问题吧,都有什么呢?有一个主要的叫做fair channel,然后还有什么呢?还有叫做哎,Soet China,还有什么呢?还有叫做summer socket summer socket,还有什么呢?叫做date gra channel,对吧?那我们说首先第一个,第一个叫啥意思,是文件通道啊对吧,专门用于操作本地文件的吧,是完成本地文件数据传输了呀,那么另外几个大家见过没有啊,是不三的呀,So sorry呀,这是透字对吧?那说白了就是它们俩是不是叫做用于pcp,是不是网络还用啊,它俩用于pcp吧,下面是不在这啊udp,所以吧,所以说它。
10:43
只用于本地的,下边这仨用于网络IO网络数据的分数分明说吧对吧,那这就是主要的几个通道的时间类,那么接下来有了这些通道,我们是不是就是如何获取通道啊,那么三说获取通道,所以怎么获取通道呢?实际上获取通道在JDK1.7以后,它有三种方式,那么第一种方式是什么呢?我们可以通过对吧说招va咱们之内支持通道的类提提的类提供了一个叫做get channel方法,可以获以通道对吧?所以张ER针对支持通道的内是不是提供了一个带带的三种方法呀,可以获取通道,这没问题吧,对吧,那说什么呢?分别有,比如说叫做file input stream对吧,相应的对应的那就叫做fair fair output stream。那么还有什么呢?还有叫。
11:43
啊,Random access file这个还记得不啦,是不随机存取文件流啊对吧,大也支持通道,还有什么呢?那这几个实际实际上是不是叫做本地IO操作的对吧?我们可以分个类叫做本地IO是不是用这几个呀?那相应的那是不是还有啊是不网络I啊对吧?网络I网络I有哪几个呢?分别叫做是不socket呀,那相的server socket对吧的还有data gram socket对吧?那这几个就是支持通道的类,它们都有get channel方法可以获取对应的通道。
12:25
是不,你要是再有音input的,那得到那个通道,你是不是可以用于输入啊,对吧对吧,可以获取对用的通道,那这样获取通道呢?第一种方式,那么还有第二种方式,第二种方式呢?我们说在叫做JDK1.7对吧,JDK1.7中的对吧提供了一个方法对吧中的NIO2L2,我们说这个个1.7以后对NIO的一个改动,我们是不是统称为n nio2啊对吧,我们这个1.7以后被NIO的一个更新统称为NI,我们说在这个0.7中的202提供了一个静态方法,对吧说针对针对各个各个通道提供了一个静态方法,这个静态方法叫做open,你也可以获取通道。
13:21
是不吧,对吧,那还有第三种方式,还有第三种方式呢,是什么呢?也是JDK1.7对吧,中的1.7中的这个叫做叫做NI2对吧,然后呢的一个叫做files工具类的一个叫做new be channel方法,它也可以获取通道。是吧,对吧,那这几个呢,这是获取通告的三种方式。
我来说两句