00:00
好,同学们。由于select,它只是把我们的轮询内核化了,但是它方法还不够细腻,还有一些约束和上线性能还是不够后两个那么优秀,那么基于此,我们来看一下它的升级版pro方法,好,那么同学们。老规矩,1997年才实现了破好了,那么这个网址呢,我就不打开了啊,跟那个may也差不多,那么同学们请看那破来还是系统内核值的函数。那么它有什么呢,这个呢就三个。这有个ru结构体PFD,那么分别就是。我们前面讲过的react反应的事件驱动模型好。来吧,代码说话,首先先看啊,他呢是这么干。
01:07
将五个FD5个客户端连接嘛,从用户态拷贝到内核。Per也是阻塞方法,执行方法,如果有数据,会将FD对应的事件记为per in就是读,那么破方法会返回,那么循环变列,查找哪个FD的位置被pro in了,那么加事件重置为零,注意可以复用了,对置位的FD进行读取和处理,这个就是它的全部流程。那么来同学们。我们先来看一下源码,再说它解决的问题啊,请看一眼。这个呢,是我们前面所说的函数PFD,这个这个这个,那么也就是我们这儿所说的这个PFD这么一个结构体,好它分别什么意思呢,老。
02:06
这个文件描述符这个关系的事件,比如是读还是写这个,如果该文件描述符有事件发生,重置为一好还是五个客户端模拟一下,那么同学们老爷啊,前面这帮except等等,请看pull in,那么except转载进来,监听了以后挨个挨个打进来。那么这个时候请看有点类似于这个类啊,上面这个类啊,我给你设置的。干嘛呢?PFD,这是不是就点FD,那么每个FD就等于我们拷贝进来的这五个模拟的客户,然后告诉他的事件。比如说我们本次举的in什么意思啊,只是读的事件pull out是写的事件啊,相当于说拷贝进来,并且给你细化了,那么来这五个客户端说明白了往下翻。
03:10
我是。循环,那么泡泡FD55万,那么泡中传入这么一个速度,交给内核判断是否有事情发生,如果哪个发生事件了,就只为一好,还是便离这个数组找到哪个坡,FD有事件发生,找到了。这个是为零,然后瑞的读取数值和我们这都差不多,这么说能跟上兄弟们好,那么它这好处是什么呢?它不再是像select塔一样用个bit map了,解除了1024的大小进了一步,第二个解决了reset不可重用的情况,那么对不起,这两个一解决,是不是我们的优点又放大了,我们过来这看。
04:04
破呢,就解决了这个数组的限制啊,可以一次性管理更多的client端,那么它和select的主要区别就是去掉了select只能监听幺零、二四个文件描述符的限制,第二个当PFD数组中有事情发生的时候,相应的事件Y可以记为一,便利的时候又置位回零,实现了坡这个数组的重用。那么接下来不用多说,问题是不是就是刚才四条里面解决了一二前两条本质啊,原理还是select方法。还存在着select方法阵中的一些问题,那第一个数组拷贝的内核态有开销吧,第二个我并没有通知是哪个用户态有这个数据仍然需要on的便利,OK,所以这个就是我们破方法,只不过在select上面小修小补,本质还是select方法的一种小优化。那么基于此,猛男登场。
我来说两句