IO模型总结

POSIX对同步IO和异步IO的定义如下:

  •     同步IO操作(synchronous IO operation)   导致请求进程阻塞,直到IO操作完成。
  •     异步IO操作(asynchronous IO operation) 不导致请求进程阻塞。

单单理解两句话,我们可以看出同步IO就是阻塞的,异步IO就是非阻塞的。然而

同步阻塞,同步非阻塞,异步阻塞,异步非阻塞究竟要如何理解。

我们看图说话。

当我们在进程内调用一个读数据的操作如 String res = read();

阻塞IO :read方法内部先等待数据,再拷贝数据从内核到用户。该方法一直未返回,主进程一直阻塞。 即同步阻塞IO。

非阻塞IO:read方法不等待数据准备就绪就直接返回,返回的是一个错误码(EWOULDBLOCK),所以进程可以根据返回结果来决定下一步的走向,为了拿到数据,就只能如下一直循环。但当数据准备好了的话,read就会阻塞在拷贝数据上。   根据定义,只要阻塞进程就属于同步IO。所以该模型是同步非阻塞IO。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值