C++网络编程之I/O多路复用、IO模型

1.I/O多路复用之select模型

1.1 select模型服务端的流程

1.2 bitmap位图

  • _FD_SETSIZE可以重新定义它的值的大小,但是实际应用开发不推荐这样使用,因为如果有更多socket的时候可以选择poll模型或者epoll模型

1.3 select水平触发

  • select采用水平触发的方式,如果报告fd后事件没有被处理或者数据没有被完全读取,那么下次select时会再次报告该id,也就是说select不会丢失事件和数据。

1.4 select的缺点

  • select支持的文件描述符数量太小,默认是1024。虽然可以调整,但是描述符数量越大,效率就会更低,因此调整的意义不大。
  • 每次调用select,都需要把fdset从用户态拷贝到内核态
  • 同时在线的大量客户端有事件发生的可能性太小,但是还是需要遍历fdset。因此随着监视的描述符数量增长,其效率也会线性降低。

2.I/O多路复用之poll模型

2.1 poll模型与select模型比较

  • poll和select在本质上没有差别,管理多个描述符也是进行轮询。根据描述符的状态进行处理,但是poll模型没有最大文件描述符数量的限制
  • select的fdset采用bitmap,poll采用数组
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值