epoll和select的分析
来源:互联网 发布:ubuntu安装打印机驱动 编辑:程序博客网 时间:2024/05/15 06:59
昨天关于epoll和select的问题被阿里的面试官狂虐,今天好好准备下吧。。。两个函数都是I/O多路复用
select 函数
int select(int maxfd,fd_set* read,fd_set* write,fd_set* exception,struct timeval* timeout);
第一个参数是传递给内核的最大的描述符+1,
参数read,write,exception,是观察这些描述符上是否有读、写、异常等,
timeout有三种方式 1)timeout == NULL时,永远等待下去,直到有一个描述符准备好 2)timeout->sec != 0 || timeout->usec != 0 有一个描述符准备好就返回,但不超过给定
的时间3)timeout->sec == 0 || timeout->usec == 0,根本不等待,立即返回.
函数返回准备好的描述符的个数
epoll 函数
int epoll_create(int size) 返回一个要句柄,size是告诉内核大致要处理的事件的数目
int epoll_ctl(int epfd,int op,int fd,struct epoll_event* event) epfd是epoll_create返回的句柄,op是操作(三种,添加事件,修改事件,删除事件),fd是监听的连接套接字,event
是在告诉epoll对什么样的事件感兴趣
int epoll_wait(int epfd,struct epoll_event* events,int maxevents,int timeout)
收集在epoll监控的事件中发生的事件,epoll会把发生的事件复制到events数组中,maxevents是events数组的大小,timeout表示没有检测到时事件发生时最多等待的时间,如果是0的话,会立即返回
两种触发方式:水平触发和垂直触发,当一个事件发生时,通过epoll_wait可以获取到该事件,但是当该事件对应的套接字缓冲区未处理完时,设置为边缘触发时,通过epoll_wait 不能获取到该事件,通过水平触发的方式可以.
三点不同:
1)select对文件描述符的个数有限制,epoll对事件发生的个数没有限制
2)select采用轮询的方式检查每个描述符是否是活跃的,epoll_wait获得的事件都是活跃的
3)epoll采用的是内存映射的技术,加速了内核态和用户态之间的消息传递
参考:
http://blog.csdn.net/networm3/article/details/8659279
http://blog.csdn.net/mmz_xiaokong/article/details/8704988
http://blog.csdn.net/lingfengtengfei/article/details/12398299
- epoll和select的分析
- select,poll和epoll分析
- Select和epoll的区别
- Select和epoll的区别
- Select和epoll的区别
- select和epoll的区别
- Select和epoll的区别
- select和epoll的区别
- Select和epoll的区别
- Select和epoll的区别
- epoll 和 select 的区别
- select和Epoll的区别
- epoll和select的区别
- epoll和select的区别
- epoll和select的区别
- select和epoll的总结
- Select和epoll的区别
- select和epoll的区别
- 使用java中的Set去除重复单词
- ubuntu14安装JDK1.7 , TOMCAT7
- 美满电子校园招聘
- Android的Service生命周期
- NYOJ题目915+-字符串(水题,字符串)
- epoll和select的分析
- ASP.Net之旅-又遇SQLHelper
- TCP协议三次握手过程分析与四次挥手分析
- SQL的四种连接-左外连接、右外连接、内连接、全连接
- lua——很好很强大的脚本语言
- 设计模式观后(c++还原之九 代理模式)
- org指令详解
- 【学习】python开源框架
- lua文件读取注意事项