实现过程:
1.创建文件描述符集合
2.添加文件描述符到集合中
3.通过内核进行检测
4.根据返回的结果做对应的操作(对io进行读或者写操作)
函数接口select进行并发
功能:检测多路io
参数1:int nfds :fds最大值 + 1
参数2:readfds 读事件
参数3:writefds 写事件
参数4:exceptfds 其他 : 一般null
参数5:timeout 一般null
返回值:成功返回内核通知给我们到达fd的个数
失败返-1
不足:
select 只能检测1024个fd(有限制)
select 监听的文件描述符在用户层,需要在应用层和内核层互相传递数据
select 需要循环遍历才能找到产生的事件
select 只能工作在水平触发模式(低速模式),无法工作在边缘触发模式(高速模式)
函数poll
不足:
将将测fd上限优化为无限制
其他与select相同
函数epoll实现并发
1.创建文件描述符集合:epoll_create(int size)成功返回句柄,失败返回-1
2.添加fd到对应集合:int epoll_ctl();
3.通知内核进行检测:int epoll_wait();
4.根据返回的结果对io进行读写操作
epoll优点:
配置网络:
网络重启命令: