同步IO和异步IO+IO模型

在说明同步IO和异步IO之前先说一下IO五大模式。

1、五大IO模型

①阻塞IO②非阻塞IO③IO多路复用IO④信号驱动IO⑤异步IO。

  1. 阻塞IO:发起请求一直等到数据返回。(同步)
    A同学用杯子装水,打开水龙头装满水然后离开,水龙头没有水,他也要等到有水并装满杯子才能离开去做别的事情。

  2. 非阻塞IO:不管有没有数据都返回,没有就隔一段时间再来请求,如此循环。在事件已经发生的情况下操作费阻塞IO,才能提高效率。所以非阻塞IO一般和其他IO一起使用,如IO复用,SIGIO信号。
    B同学也用杯子装水,打开水龙头后发现没有水,它离开了,过一会他又拿着杯子来看看,离开现场(回到用户进程)。(同步)

  3. IO多路复用:多路指多个TCP连接(即socket或者channel),复用指复用一个或几个线程。关键是能实现同时对多个IO端口进行监听,可以同时对多个读/写操作的IO函数进行轮询检测,直到有数据可读或可写时,才真正调用IO操作函数。(同步)
    C同学发现有一排水龙头,舍管阿姨告诉他这些水龙头都还没有水,等有水了告诉他。于是等啊等(select调用中),过了一会阿姨告诉他有水了,但不知道是哪个水龙头有水,一个个打开装水。

  4. 信号驱动IO:事先发出一个请求,当有数据后会返回一个标识回调,这时你可以去请求数据。(银行排号)。D同学先告诉阿姨要接水,有水告诉他。(同步)

  5. 异步IO:发出请求就返回,内核会进行操作,等待通知在内核处理完后。
    E同学叫阿姨把杯子装满水通知他。(异步)

2、同步IO和异步IO

同步I/O:

  • 同步IO指的是用户进程触发I/O操作并等待(阻塞)或者轮询(非阻塞)的去查看I/O操作是否就绪。
  • 同步IO的执行者是IO操作的发起者
  • 同步IO需要发起者进行内核态到用户态的数据拷贝过程,所以这里必须由个阻塞

异步I/O:

  • 异步IO是指用户进程触发I/O操作以后就立即返回,继续开始做自己的事情,而当I/O操作已经完成的时候会得到I/O完成的通知。
  • 异步IO的执行者是内核线程内核线程将数据从内核态拷贝到用户态,所以这里没阻塞。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值