对于IO的一些理解

目前对于IO的常见处理模式主要有四种:

  1. 阻塞IO
  2. 非阻塞IO
  3. 多路复用IO
  4. 异步IO

下面就用客服接电话的场景来对IO操作进行解释。客服的主要事情有:接打电话(读写请求)、转接技术员(IO数据处理)、喝茶。

阻塞IO:就是一个客服只有一部无铃声但有屏幕的固定电话,客服一直坐着看着屏幕等电话来,只有接完一个电话再转接技术员、喝茶、看报。

非阻塞IO:客服只有一个无铃声有屏幕的固定电话,但这个客服不会死盯着屏幕,他在看到屏幕没有来电时,转头去喝茶,喝完茶再来看下屏幕。

多路复用IO:客服有多个无铃声有屏幕的固定电话,客服坐在那死等,哪个先来接哪个。

异步IO:客服给了业务员一个手机,并把手机号记录在了固定电话上(注册监听事件),让固定电话来电时能通知至业务员手机上,客服自己可以出去喝茶、看报。

io过程:从内核态到应用态需要经过:数据准备、内存拷贝。

阻塞与非阻塞是对应关系,区别就在于是否等待上述过程完成。而多路复用关注的是在单线程里处理多个通道。而异步IO的特点就是用户线程与IO操作之间无阻塞。

各模型特点:

阻塞IO:节省cpu时间,对于多通道不友好(一般用多线程来处理多通道,开销大)

非阻塞:浪费cpu(一般都会反复去尝试接收数据),适合在IO不是很频繁、时效性不高的场景使用,简单来讲就是有空的时候去处理下IO,其他时间都去干别的事。对于多通道的支持也不友好(循环,浪费时间)

IO多路复用:单线程支持多通道,节省资源(线程资源),缺点是:同步处理,在高负载的情况下,单线程存在处理瓶颈,需要用多线程来处理数据,保证时效性。

异步IO:主线程不受IO操作影响。缺点在异步模式下,如果需要保证事务、时序,编程模型就会比较复杂,容易出错。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值