select/poll/epoll
来源:互联网 发布:唯一旅拍怎么样知乎 编辑:程序博客网 时间:2024/06/08 02:20
一、select
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。
对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。原因如下:
1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费2.1024上限问题,一个处理多个用户的进程,fd值远远大于1024
所以这个时候应该采用poll。
二、poll
poll传递的是数组头指针和该数组的长度,只要数组的长度不是很长,性能还是很不错的,因为poll一次在内核中申请4K(一个页的大小来存放fd),尽量控制在4K以内。
三、epoll
epoll还是poll的一种优化,返回后不需要对所有的fd进行遍历,在内核中维持了fd的列表。select和poll是将这个内核列表维持在用户态,然后传递到内核中。但是只有在2.6的内核才支持。
epoll更适合于处理大量的fd ,且活跃fd不是很多的情况,毕竟fd较多还是一个串行的操作。
epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是一个代表就绪描述符数量的值,你只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也使用了内存映射(mmap)技术,这样便彻底省掉了这些文件描述符在系统调用时复制的开销。
另一个本质的改进在于epoll采用基于事件的就绪通知方式。在select/poll中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,当进程调用epoll_wait()时便得到通知。
0 0
- select、Poll、epoll比较。
- select,poll,epoll区别
- select,poll,epoll用法
- select, poll, epoll
- select、poll、epoll
- select,poll,epoll区别
- select、poll和epoll
- socket-select ,poll ,epoll
- select poll epoll区别
- select、poll和epoll
- select, poll, epoll
- select,epoll,poll比较
- poll, select, epoll
- select、Poll、epoll比较
- select、poll和epoll
- select,poll,epoll总结
- select,epoll,poll比较
- select,epoll,poll比较
- SVM(六)将SVM用于多类分类
- [JSOI2008]魔兽地图DotR解题报告
- SpringMVC+Spring+Mybatis+freemark+bootstrap(持续更新完善中)
- JAVA-Hibernate-SQL类型映射表及Hibernate标识生成策略
- 邻接矩阵的广度优先搜索
- select/poll/epoll
- Hbase Client Test Case
- leetcode 204题求素数个数
- Linux configure for java web developer
- RHEL 6.x 搭建rsyslog日志服务器和loganalyzer 日志分析工具
- 项目实践——Easyui中tree的使用
- hibernate 二级缓存配置
- iOS 检测版本更新
- uva 10066 lcs 水题