21 | poll:另一种I/O多路复用
该思维导图由 AI 生成,仅供参考
poll 函数介绍
- 深入了解
- 翻译
- 解释
- 总结
基于poll的I/O多路复用技术是本文的重点。文章首先介绍了poll函数相对于select函数的优势,它通过描述符集合来表示检测的I/O对象,突破了文件描述符个数的限制。与select不同,poll函数的结果保留在revents字段中,避免了每次检测都需要重置待检测的描述字和感兴趣的事件。此外,文章还详细介绍了poll函数的返回值和参数timeout的含义,以及对比了poll函数和select函数的不同之处。通过编写基于poll的服务器程序,读者可以深入了解poll的用法和其在高并发场景下的优势。 在实验部分,作者通过telnet客户端连接到服务器程序,展示了基于poll的服务器程序的I/O复用能力。多个客户端输入的字符互不影响,且一个客户端断开连接不会影响其他客户端。最后,文章提出了两个思考题,引导读者深入思考和交流。 总的来说,本文通过介绍poll函数及其在服务器程序中的应用,展示了其在高并发场景下的优势和灵活性。读者可以通过本文快速了解poll技术特点,并在实际应用中加以思考和探索。
《网络编程实战》,新⼈⾸单¥59
全部留言(31)
- 最新
- 精选
- 夏目老师,我还是没明白poll和select的本质区别是什么,能否指点一下
作者回复: 两者只是编程接口的区别,从内核实现角度来讲,其实本质实现是差不多的,poll客服了select有限文件描述字的缺陷,适用的范围更广一些。
2019-11-15527 - 徐凯1.采用动态分配数组的方式 2.如果内存不够 进行realloc 或者申请一块更大的内存 然后把源数组拷贝过来
作者回复: 鼓励动手来一个。
2019-09-2520 - 阿卡牛还有种信号驱动型I/O,老师可以讲解吗
作者回复: 让内核在描述符就绪时发送SIGIO信号通知我们,这种模型为信号驱动式I/O(signal-driven I/O),说实话,这个模型在实战中用的是比较少的,作为一个知识点知道就可以了。
2019-10-2412 - Hale能讲讲为什么不用POLLIN来判断套接字可读?
作者回复: POLLIN包括了OOB等带外数据的检测,POLLRDNORM则不包括这部分。 #define POLLIN 0x0001 /* any readable data available */ #define POLLRDNORM 0x0040 /* non-OOB/URG data available */
2019-09-26410 - D老师可否简单讲下底层实现,比如底层是数组,队列,红黑树等。
作者回复: 好问题,我收集一下素材。
2019-09-2539 - fedwing老师,请教个问题,我看ready_number在29行的if里如果有会--,后面read for循环里,如果处理也--,我是不是可以这样理解,events_set[0]表示listen的套接字,这个套接字里如果有pollin,那么肯定是新连接(而不是普通套接字的读数据),所以这时就是获取对应的连接的文件描述符,将其加入到event_set数组里,用于后续poll的时候,多检测一个文件描述符,如果ready_number在前面的处理--后,还大于0,则表示events_set里其他的文件描述符也有待检测的事件触发,这些就是常规的双端连接对应的套接字,它们pollin的话,就是我们常规意义里的read数据了。
作者回复: 是的。
2020-08-1225 - Geek_68d3d2老师我看网络编程里面使用了各种函数,函数里面各种参数,您那里有没有什么文档参考手册啥的可供我们需要时翻阅,光靠脑子记,记不来啊。您平常都是怎么写代码啊,这些函数都是背下来了吗。
作者回复: Linux下"man xxx",windows下看MSDN,当然,有一些常见的是要记下来的。
2019-12-115 - Simple life我搞不懂,accept后的fd要加入event_set,然后再遍历取出,直接拿来读写不行吗?
作者回复: 因为我们在同时处理多个I/O,一旦一个fd经过accept处理后加入event_set,之后就可以通过一个poll调用来获取多个不同的fd来加以处理。这是event_set的意义。
2020-07-3133 - Tesla老师 poll不改变传入检测的event的状态,而是返回revent,是出于什么目的呢?
作者回复: 这个设计很合理,一个是输入参数,一个是输出参数,只不多在同一个结构体内。如果只有一个参数,既是输入,也是输出,反到有点奇怪。
2020-03-052 - 传说中的成大大我还是不太明白select和poll进行事件注册的区别,希望老师再给我指点指点
作者回复: 区别是编程的接口不一样,原理基本一致,但是select一般来说有文件句柄的现在,poll则没有。我觉得你可以看代码体会一下。
2019-09-302