问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

epoll中的data联合体怎样使用的问题

发布网友 发布时间:2022-04-25 12:43

我来回答

1个回答

热心网友 时间:2024-03-04 04:23

当一个节点和多个节点建立连接时,如何高效的处理多个连接的数据,下面具体分析两者的区别。1.select函数函数原型:intselect(intnfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout);参数介绍:(1)nfds--fdset集合中最大描述符值加1(2)fdset--一个位数组,其大小*为_FD_SETSIZE(1024)位数组的每一位代表的是其对应的描述符是否需要被检查。(3)readfds--读事件文件描述符数组(4)writefds--写事件文件描述符数组(5)exceptfds--错误事件文件描述符数组(6)timeout--超时事件,该结构被内核修改,其值为超时剩余时间。对应内核:select对应于内核中的sys_select调用,sys_select首先将第二三四个参数指向的fd_set拷贝到内核,然后对每个被SET的描述符调用进行poll,并记录在临时结果中(fdset),如果有事件发生,select会将临时结果写到用户空间并返回;当轮询一遍后没有任何事件发生时,如果指定了超时时间,则select会睡眠到超时,睡眠结束后再进行一次轮询,并将临时结果写到用户空间,然后返2.select/poll特点传统的select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。poll的执行分三部分:(1).将用户传入的pollfd数组拷贝到内核空间,因为拷贝操作和数组长度相关,时间上这是一个O(n)操作(2).查询每个文件描述符对应设备的状态,如果该设备尚未就绪,则在该设备的等待队列中加入一项并继续查询下一设备的状态。查询完所有设备后如果没有一个设备就绪,这时则需要挂起当前进程等待,直到设备就绪或者超时。设备就绪后进程被通知继续运行,这时再次遍历所有设备,以查找就绪设备。这一步因为两次遍历所有设备,时间复杂度也是O(n),这里面不包括等待时间(3).将获得的数据传送到用户空间并执行释放内存和剥离等待队列等善后工作,向用户空间拷贝数据与剥离等待队列等操作的的时间复杂度同样是O(n)。3.epoll机制Linux2.6内核完全支持epoll。epoll的IO效率不随FD数目增加而线性下降。要使用epoll只需要这三个系统调用:epoll_create(2),epoll_ctl(2),epoll_wait(2)epoll用到的所有函数都是在头文件sys/epoll.h中声明的,内核实现中epoll是根据每个fd上面的callback函数实现的。只有"活跃"的socket才会主动的去调用callback函数,其他idle状态socket则不会。如果所有的socket基本上都是活跃的---比如一个高速LAN环境,过多使用epoll,效率相比还有稍微的下降。但是一旦使用idleconnections模拟WAN环境,epoll的效率就远在select/poll之上了。3.1所用到的函数:(1)、intepoll_create(intsize)该函数生成一个epoll专用的文件描述符,其中的参数是指定生成描述符的最大范围(2)、intepoll_ctl(intepfd,intop,intfd,structepoll_event*event)用于控制某个文件描述符上的事件,可以注册事件,修改事件,删除事件。如果调用成功返回0,不成功返回-1intepoll_ctl{intepfd,//由epoll_create生成的epoll专用的文件描述符intop,//要进行的操作例如注册事件,可能的取值EPOLL_CTL_ADD注册、//EPOLL_CTL_MOD修改、EPOLL_CTL_DEL删除intfd,//关联的文件描述符structepoll_event*event//指向epoll_event的指针}(3)、intepoll_wait(intepfd,structepoll_event*events,intmaxevents,inttimeout)用于轮询I/O事件的发生,返回发生事件数intepoll_wait{intepfd,//由epoll_create生成的epoll专用的文件描述符structepoll_event*events,//用于回传代处理事件的数组intmaxevents,//每次能处理的事件数inttimeout//等待I/O事件发生的超时值//为0的时候表示马上返回,为-1的时候表示一直等下去,直到有事件//为任意正整数的时候表示等这么长的时间,如果一直没有事件//一般如果网络主循环是单独的线程的话,可以用-1来等,这样可以保证一些效率//如果是和主逻辑在同一个线程的话,则可以用0来保证主循环的效率}epoll是为处理大批量句柄而作了改进的poll。4.epoll的优点:支持一个进程打开大数目的socket描述符(FD)select最不能忍受的是一个进程所打开的FD是有一定*的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候可以:(1)可以修改这个宏然后重新编译内核,不过资料也同时指出,这样也会带来网络效率的下降(2)可以选择多进程的解决方案,不过虽然linux上创建进程的代价比较下,但是仍旧是不可忽视的,所以也不是很完美的方案epoll没有这样的*,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,具体数组可以查看cat/proc/sys/fs/file-max查看,这个数目和系统内存关系很大。IO效率不随FD数目增加而线性下降传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是"活跃"的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。epoll不存在这个问题,它只会对“活跃”的socket进行操作。这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有"活跃"的socket才会主动的去调用callback函数,其他idle状态socket则不会,在这点上,epoll实现了一个"伪"AIO,因为这时候推动力在os内核。在一些benchmark中,如果所有的socket基本上都是活跃的---比如一个高速LAN环境,epoll并不比select/poll有什么效率,相反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idleconnections模拟WAN环境,epoll的效率就远在select/poll之上了。使用mmap加速内核与用户空间的消息传递这点实际上涉及到epoll的具体实现了。无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。而如果你想我一样从2.5内核就关注epoll的话,一定不会忘记手工mmap这一步的。内核微调这一点其实不算epoll的优点了,而是整个linux平台的优点。也许你可以怀疑linux平台,但是你无法回避linux平台赋予你微调内核的能力。比如,内核TCP/IP协议栈使用内存池管理sk_buff结构,那么可以在运行时期动态调整这个内存pool(skb_head_pool)的大小---通过echoXXXX>/proc/sys/net/core/hot_list_length完成。再比如listen函数的第2个参数(TCP完成3次握手的数据包队列长度),也可以根据你平台内存大小动态调整。更甚至在一个数据包面数目巨大但同时每个数据包本身大小却很小的特殊系统上尝试最新的NAPI网卡驱动架构。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我网贷一万,手续费300,分24期,每期506.67,请问怎么计算月息,和年利率... 多普达手机铃音多普达手机铃声 【车载软件推荐】有车一族必备软件有哪些?好用的车主必备app 我画画时常被说我画画不动脑筋,弱弱的问一句,画画怎样动脑筋? 三星手机如何设置时间在桌面显示? 精确到十分位,要看小数点右边第一位 对吗 要把一个小数精确到十分位,就要看这个小数的( )A.十分位B.百分位C... 黑米算不算粗粮 存定期协议利率选是还是否? 同城上那些卖二手ndsi的是真的吗? 辩断金丝熊是公是母,看不出来? Linux中select poll和epoll的区别 初一 英语 poll是什么意思 请详细解答,谢谢! (22 19:29:7) linux 下/sys/class/gpio 怎么注册 poll 什么意思 POLLRDNORM未定义,换成POLLIN就可以 linux下http的底层函数都包括那些?在哪个库中定义 linux pollhup什么情况发生 怎么辨别金丝熊的公母? windows与linux 头文件对照 unix的poll如何使用 页面文件名称是什么?大小是多少?如何填写? 驱蚊灯通过什么原理驱蚊? 驱蚊灯的功效原理是什么? 驱蚊灯能驱飞虫吗? 灯光驱蚊听起来很高科技的样子,对宝宝也没害处,但是有用吗? 夏天蚊虫多,常备驱蚊灯,驱蚊灯通过什么原理驱蚊?对人体有害吗?_百度... 京威股份发行债卷认购完成没有 我想知道驱蚊灯真的可以驱蚊吗?求大神回答 京威股份目前巳具备高送转条件吗 请问一下我养的这只金丝熊是公的还是母的,根据网上的资料我还是分辨不出... 关于select系统调用的一道题 怎么分辨金丝熊是公的还是母的 我上传的文件没有描述符是怎么回事? 怎样分辨金丝熊是雌还是雄???急?? c语言休眠函数怎么写 为什么subprocess.Popen.poll=0,但是pipe里面还有没读完的数据_百度知 ... 什么是阻塞操作? C中除了stdio.h还有什么头文件 jenkins 中 Poll SCM 和 Build periodically 的区别 轻奢智能投影谁更值得购买?坚果J9/极米H2投影对比评测 极米h2可以用键盘打字吗 极米h2投屏有乱码,有时候只有声音没有画面,但重启一般都会恢复怎么回 ... 苹果5屏幕玻璃怎么换 苹果5的屏幕是什么材质 5英寸屏幕有多大,对角线多少? 苹果5怎么辨别原装屏幕 iphone 5和5s的屏幕一样吗? 2019版maya里的阿诺德渲染 能渲染置换贴图 可是导入颜色贴图却不显示颜... 2017版maya Arnold渲染凹凸和置换都没效果,是怎么回事