IO 多路服用模型

3d47e9eae35594c2624664e5332911bb88f.jpg

 

多个连接公用一个等待机制,本模型会阻塞进场,但是进程是阻塞在select 或者poll 这两个系统调用上,而不是阻塞在真正的IO操作上

用户首先将需要进行IO操作添加到select中,继续执行做其他的工作(异步),同时等待select 系统调用返回。当数据到达时,IO被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。

从流程上来看,使用select函数继续IO请求和同步阻塞模型没有太大的区别,甚至还多了添加监视IO,以及调用select函数的额外操作,效率更差。并且阻塞两次,但是第一次阻塞在select上时,select可以监控多个IO上是否已有IO操作准备就绪,即可达到在同一个线程内同时处理多个IO请求的目的。而不像阻塞IO那种,一次只能监控一个IO

虽然上述方式允许单线程内处理多个IO请求,但是每个IO请求的过程还是阻塞的(在select 函数上阻塞),平均时间甚至比同步阻塞IO模型更长。如果用户线程只是注册自己需要的IO请求,然后去做自己的事情,等到暑假来时在进行处理,则可以提高CPU的利用率

IO多路复用是最常用的IO模型,但是其异步程度还不够‘彻底’,因它使用了会阻塞线程的select系统调用。因此IO多路复用只能称为异步阻塞IO模型,而非真正的异步IO.

IO多路复用是指内核一旦发现进场指定的一个或者多个IO条件准备就绪,就通知该进程

IO多路复用适用如下场合:

    当客户端处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用

    当一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般也要用到IO      复用

    当一个服务器既要处理TCP,又要处理UDP,一般使用···

    当一个服务器要处理多个服务或多个协议 

转载于:https://my.oschina.net/huangguangsheng/blog/2231178

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值