- 18
- 0
- 约1.13万字
- 约 12页
- 2017-06-08 发布于北京
- 举报
linux下的常见多路复用技术
HYPERLINK /?sort=6 [C语言]post by HYPERLINK /?author=12 陈俊生 / 2012-1-4 9:25 Wednesday
要实现I/O多路复用有很多的方式,其中可以用进程或者是线程等来实现,也可以用select/poll /epoll/port等来实现。在相比两者之间,利用select/poll /epoll/port等来实现复用效率更快,实现更容易,在底层的需要的资源更少,效率更快。
下面就介绍一下select/poll /epoll/port等的具体用法。
Select的用法。
select原型:
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
其中参数n表示监控的所有fd中最大值+1。和select模型紧密结合的四个宏,含义不解释了:
FD_CLR(int fd, fd_set *set);FD_ISSET(int fd, fd_set *set);FD_SET(int fd, fd_set *set);FD_ZERO(fd_set *set);
理解select模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set中的每一bit可以对应一个文件描述符fd。则 1字节长的fd_set最大可以对应8个fd。(1)执行fd_set set; FD_ZERO(set);则set用位表示是0000,0000。(2)若fd=5,执行FD_SET(fd,set);后set变为0001,0000(第5位置为1)(3)若再加入fd=2,fd=1,则set变为0001,0011(4)执行select(6,set,0,0,0)阻塞等待(5)若fd=1,fd=2上都发生可读事件,则select返回,此时set变为0000,0011。注意:没有事件发生的fd=5被清空。
基于上面的讨论,可以轻松得出select模型的特点:(1)可监控的文件描述符个数取决与sizeof(fd_set)的值。我这边服务器上sizeof(fd_set)=512,每bit表示一个文件描述 符,则我服务器上支持的最大文件描述符是512*8=4096。据说可调,另有说虽然可调,但调整上限受于编译内核时的变量值。(2)将fd加入select监控集的同时,还要再使用一个数据结构array保存放到select监控集中的fd,一是用于再select返回 后,array作为源数据和fd_set进行FD_ISSET判断。二是select返回后会把以前加入的但并无事件发生的fd清空,则每次开始 select前都要重新从array取得fd逐一加入(FD_ZERO最先),扫描array的同时取得fd最大值maxfd,用于select的第一个 参数。(3)可见select模型必须在select前循环array(加fd,取maxfd),select返回后循环array(FD_ISSET判断是否 有时间发生)。
下面给一个伪码说明基本select模型的服务器模型:
array[slect_len];nSock=0;array[nSock++]=listen_fd;(之前listen port已绑定并listen)maxfd=listen_fd;while {FD_ZERO(set);foreach (fd in array) {fd大于maxfd,则maxfd=fdFD_SET(fd,set)}res=select(maxfd+1,set,0,0,0);if(FD_ISSET(listen_fd,set)){newfd=accept(listen_fd);array[nsock++]=newfd;if(--res=0) continue}foreach 下标1开始 (fd in array) {if(FD_ISSET(fd,set))执行读等相关操作如果错误或者关闭,则要删 除该fd,将array中相应位置和最后一个元素互换就好,nsock减一if(--res=0) continue}}
poll模型poll()系统调用是System V的多元I/O解决方案。它解决了select()的几个不足,尽管select()仍然经常使用(多数还是出于习惯,或者打着可移植的名义):poll的原型#include sys/poll.hint poll (struct pollfd *fds, unsigned int nfds, int timeout
您可能关注的文档
- CMA访谈——汪润怡:站在CEO角度进行思考.docx
- CMOS与或门异或门版图.doc
- CMP操作系统技术.doc
- CNACR对经济活动分类产品范围的说明.doc
- CNET创始人如何做到5年挥霍18亿美元.doc
- cocos引擎—从莉莉丝的彩蛋说起:如何给代码加密.doc
- codesoft简易使用手册.doc
- cognos基于条件制作动态报表.doc
- comebacktolife中文歌词.doc
- cooledit后期效果处理指南.doc
- 2026年及未来5年内中国液体氩气行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国黄铜合页行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国竹工艺家具行业投资前景及策略咨询研究报告.docx
- 2025年中国微机数显自动分析仪市场调查研究报告.docx
- 2026年及未来5年内中国微尘白色粉笔行业投资前景及策略咨询研究报告.docx
- 2025年中国微电脑型压胶机市场调查研究报告.docx
- 2026年及未来5年内中国数字化等功游泳训练测试系统行业投资前景及策略咨询研究报告.docx
- 2025年中国圆形花瓶市场调查研究报告.docx
- 2026年及未来5年内中国植物纤维静淀过滤器行业投资前景及策略咨询研究报告.docx
- 2025年中国超音波手套机市场调查研究报告.docx
原创力文档

文档评论(0)