同步IO、异步IO与阻塞非阻塞的关系

1、什么是同步、异步

总之:可以将同步、异步行为理解为不同的行为方式
定义:同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西时,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后、调用者可用继续执行后续操作,被调用者通过信号来通知调用者,或者通过回调函数来处理这个调用

比方说:今天你有一个Offer面试,前一天晚上Hr告诉你明天下午3点开始面试,但是到下午3点了确还没收到面试的邀请,怎么办呢?你肯定不愿意错过这个机会,就只好一直等待。
其实到下午3点的时候还没收到邀请可以主动跟Hr沟通看是什么情况,叫他有消息了给你发消息,在等待消息的时候你可以抓紧时间继续看看面经啊、做做算法题什么的.这就叫异步。
其中,一直等待和一边等待消息一边继续其他操作就是两种不同的行为方式。

2、什么是阻塞和非阻塞

总之:可以将阻塞和非阻塞理解为不同的状态
还是上面的例子,你一直阻塞自己并且等待面试邀请,这就是一种状态,如果一直没有等来面试邀请的通知,就会一直阻塞“死”自己;另外,一边等待Hr消息一边做自己的事情也是一种状态,我们只需要在一段时间内去看看有没有Hr的消息就好,这在操作系统中被称为“轮询”。

3、它们之间的关系

在这里阻塞与非阻塞与是否同步异步无关。跟Hr通过什么方式回答你结果无关。
同步I/O操作会导致请求进程阻塞,直到I/O操作完成;
异步I/O操作不导致请求进程阻塞。
阻塞式I/O模型、非阻塞I/O模型、I/O复用模型和信号驱动I/O模型都是同步I/O模型,因为其中真正的I/O操作将阻塞进程.
可能有人会问既然都非阻塞了,那为什么还是同步呢?其实我们不要将阻塞非阻塞和同步异步混淆一谈,这里的非阻塞的意思是,在我想要的资源没有到来的时候会处理不同的事情,并且每隔一段时间“轮询”一次,看我想要的资源是否到来,如果到来了,那进程现在就要全身心着手处理这个系统调用了,在处理这个系统调用的时候,那肯定是会阻塞进程的,直到进程从内核态转回用户态,进程才会继续接下来的操作。
大家一定要好好理解这几个关系!
参考:https://www.zhihu.com/question/19732473/answer/20851256

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值