IO多路复用实现并发

实现过程:

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优点:

配置网络:

网络重启命令:

  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值