select,poll,epoll总结
来源:互联网 发布:db数据库查看器 编辑:程序博客网 时间:2024/06/05 01:11
select的几大缺点:
(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
(3)select支持的文件描述符数量太小了,默认是1024
poll的实现和select非常相似,只是描述fd集合的方式不同,poll使用pollfd结构而不是select的fd_set结构,其他的都差不多。
关于三种的实现可以参考以下资料
http://blog.csdn.net/lizhiguo0532/article/details/6568964#comments
http://blog.csdn.net/lizhiguo0532/article/details/6568968
http://blog.csdn.net/lizhiguo0532/article/details/6568969
http://www.ibm.com/developerworks/cn/linux/l-cn-edntwk/index.html?ca=drs-
http://linux.chinaunix.net/techdoc/net/2009/05/03/1109887.shtml
总结:
(1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。
(2)select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,而且把current往等待队列上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,只是一个epoll内部定义的等待队列)。这也能节省不少的开销。
- select,poll,epoll总结
- select、poll、epoll总结
- select poll epoll总结
- select,poll,epoll总结
- select poll epoll 总结
- 面试总结,select,poll,epoll
- select、poll、epoll优缺点总结
- select、poll、epoll整理总结
- select,poll,epoll的归纳总结区分
- select poll epoll(总结)更新中......
- select、poll、epoll的用法总结
- select、poll、epoll之间的区别总结
- select、poll、epoll之间的区别总结
- select、poll、epoll之间的区别总结
- select、poll、epoll之间的区别总结
- select、poll、epoll之间的区别总结
- select、poll、epoll之间的区别总结
- select、poll、epoll之间的区别总结
- QT之EXE添加图标
- tomcat加入项目时报错:Project facet Java version 1.8 is not supported.
- Coconut
- QT之exe和dll打包方法
- Object有哪些基本的方法
- select,poll,epoll总结
- 单链表的插入,删除,查找,清除,毁坏,逆置函数
- Linux rpm 命令参数使用详解[介绍和应用]
- java.lang.UnsupportedClassVersionError: com/itheima/jdbc/demo2/Demo02 : Unsupported major.minor vers
- P1376 机器工厂
- TLS/SSL 协议详解 (25) https双向认证及常见问题总结
- pat 乙级 1066. 图像过滤(15)
- 项目启动报错:java.lang.NoClassDefFoundError: org/springframework/core/io/support/PropertySourceFactory
- 二维数组和指针之间的关系详解