多路复用IO----select

    上次我们介绍了五种基本的IO模型,在这五种里边多路转接IO是我们要了解的重点。

  

为什么他重要,我们先拿他和我们基础的IO来进行一下区分,当我们遇到普通的IO时都会开启一个新的进程来处理这个IO,在现在网络的访问量来开,如果同时有五千个IO来恐怕普通的机器都难以处理,更别说动不动就上亿的点击了,那这时候你的CPU占有率会相当的高,并且他并不是在干活如果没有数据的话就会阻塞在那里,浪费你的系统资源,所以就有了我们今天要介绍的多路复用IO,他是一个线程或者进程,通过他来统一管理我们的IO,这样就可以大大的提高服务器的吞吐能力。

就如上图,现在有1000个IO同时来访问机器,只有一个select进程来被系统调用,然后select会进行处理,当这1000个里边有哪个IO准备好了,可以操作了,他会通知对应的进程,这样哪个进程直接来处理就可以了。

我们来了多个IO通过多路复用IO模型来把他们管理起来,然后由这个IO来去通知对应进程是否可以操作。

多路复用主要有三种模型:select、poll、epoll这里我们分析一下他们各自的优缺点。

select模型

在Linux下我们可以通过man命令来查看select函数的详解

int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);

第一个参数:nfds is the highest-numbered file descriptor in any of the three sets, plus 1.意思是说这个参数应该是你要监听的文件描述符的个数+1,也就是文件描述符从0.....nfds-1都将会被监听处理。

对于有后边连续的三个参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值