Poll与Epoll 区别总结

来源:互联网 发布:unity3d 联网授权 编辑:程序博客网 时间:2024/06/10 20:20

1.概述
网上收集了一下poll和epoll的实现原理,写下来以备后验.
2. 从api上面看,select和poll每次调用的时候需要用户自己整理该次调用关注的文件描述符和事件,内核是不会帮助用户维护前面已经关注过的记录. 而epoll是增量式的管理,每次需要告诉内核我现在关心的哪个文件描述符,内核查询以往的记录,整合起来. 打个比方就像出去购物,select和poll老板就不怎么好,每次去的时候都需要告诉老板我喜欢什么商品.而epoll老板比较好,拿个本子记录你自己的喜好记录,你只需要告诉老板我喜好的变更即可. 言归正传, select和poll 每次需要拷贝所有的文件描述符和对应事件进入内核, epoll每次只需要拷贝最新的变更进入内核. 在文件描述符多的时候得到性能提升.
3. epoll内核维护红黑树和就绪队列来完成工作.poll每次都需要去轮询设备,而epoll是向设备注册回调函数,让设备自己来完成向就绪队列上的插入工作,内核只需要判断就绪队列是否为空.
4. 参数的返回, 都需要将就绪的事件拷贝给用户空间.
5. 总结起来,主要的不同在于传递参数的方式和 轮询,回调处理就绪队列的不同.

原创粉丝点击