poll和epoll原理对比、分析

本文通过对2.6.21.1内核中poll和epoll的工作原理的分析,揭示了epoll在处理大量文件描述符时的性能优势。epoll通过epoll_create、epoll_ctl和epoll_wait三个系统调用实现,减少了设备状态查询和数据拷贝的时间复杂度,提高了服务器在高并发场景下的效率。测试数据显示,随着监控文件描述符数量增加,epoll的性能表现远优于poll。
摘要由CSDN通过智能技术生成

         随着2.6内核对epoll的完全支持,网络上很多的文章和示例代码都提供了这样一个信息:使用epoll代替传统的poll能给网络服务应用带来性能上的提升。但大多文章里关于性能提升的原因解释的较少,这里我将试分析一下内核(2.6.21.1)代码中pollepoll的工作原理,然后再通过一些测试数据来对比具体效果。

       POLL

      先说pollpollselect为大部分Unix/Linux程序员所熟悉,这俩个东西原理类似,性能上也不存在明显差异,但select对所监控的文件描述符数量有限制,所以这里选用poll做说明。  poll是一个系统调用,其内核入口函数为sys_pollsys_poll几乎不做任何处理直接调用do_sys_polldo_sys_poll的执行过程可以分为三个部分:

1,将用户传入的pollfd数组拷贝到内核空间,因为拷贝操作和数组长度相关,时间上这是一个On)操作,这一步的代码在do_sys_poll中包括从函数开始到调用do_poll前的部分。

2,查询每个文件描述符对应设备的状态,如果该设备尚未就绪,则在该设备的等待队列中加入一项并继续查询下一设备的状态。查询完所有设备后如果没有一个设备就绪,这时则需要挂起当前进程等待,直到设备就绪或者超时,挂起操作是通过调用schedule_timeout执行的。设备就绪后进程被通知继续运行,这时再次遍历所有设备,以查找就绪设备。这一步因为两次遍历所有设备,时间复杂度也是O<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值