阻塞和非阻塞、同步和异步

一、IO概述

IO操作其实可以分成两个步骤,请求IO操作和执行IO操作。
一般的IO调用过程是这样的:发起IO操作的请求,执行IO操作,得到IO操作的结果,将结果返回给IO操作请求。

同步和异步
同步和异步是一种通信机制,涉及到调用方和被调用方,关注的是IO操作的执行过程及结果的返回方式,不同点在于双方在这两个方面的行为方式。
如果调用方需要保持等待直到IO操作完成进而通过返回获得结果,则是同步的;
如果调用方在IO操作的执行过程中不需要保持等待,而是在操作完成后被动的接受(通过消息或回调)被调用方推送的结果,则是异步的。
同步和异步,适合描述执行IO操作的情境。

阻塞和非阻塞
阻塞和非阻塞是一种调用机制,只涉及到调用方,关注的是IO操作的执行状态,不同点在于请求IO操作后,针对IO操作的状态,调用方的行为方式不同。
如果调用方等待IO操作完成后返回,则是阻塞的;
如果调用方不需要等待IO操作完成就立即返回,则是非阻塞的,
非阻塞的情况下,常常需要多次调用去check,才能获得IO操作的结果。阻塞和非阻塞,适合描述发起IO操作请求的情境。
阻塞与非阻塞,和同步异步无关,可以阻塞等待同步执行过程完成,也可以阻塞等待异步执行过程完成。
根据以上理解,同步和异步,阻塞和非阻塞,是可以互相组合的。

二、同步异步和阻塞非阻塞组合

同步阻塞	调用者发起IO操作请求,等待IO操作完成再返回。IO操作的过程需要等待,操作执行完成后返回结果。
同步非阻塞	调用者发起IO操作请求,询问IO操作的状态,如果未完成,则立即返回;如果完成,则返回结果。IO操作的过程需要等待执行完成才返回结果。
异步阻塞	调用者发起IO操作请求,等待IO操作完成再返回。IO操作的过程不需要等待,操作完成后通过通知或回调获得结果。
异步非阻塞	调用者发起IO操作请求,询问IO操作的状态,如果未完成,则立即返回;如果完成,则返回结果。IO操作的过程不需要等待,操作完成后通过通知或回调获得结果。

三、什么是同步?什么是异步?

A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes.
An asynchronous I/O operation does not cause the requesting process to be blocked.

同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行;
异步就是:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待

举个简单的例子:
假如有一个任务包括两个子任务A和B,
对于同步来说,就是当A在执行的过程中,B只有等待,直至A执行完毕,B才能执行;
对于异步来说,就是A和B可以并发地执行,B不必等待A执行完毕之后再执行,这样就不会由于A的执行导致整个任务的暂时等待。

重点: 
判断是同步还是异步,就看同时多个任务和事件发生时,一个事件的发生或执行是否会导致整个流程的暂时等待
如果导致整个流程的暂时等待,就是同步
如果可以并行执行,那就是异步

四、什么是阻塞?什么是非阻塞?

阻塞就是:当某个事件或者任务在执行过程中,它发出一个请求操作,但是由于该请求操作需要的条件不满足,那么就会一直在那等待,直至条件满足;

非阻塞就是:当某个事件或者任务在执行过程中,它发出一个请求操作,如果该请求操作需要的条件不满足,会立即返回一个标志信息告知条件不满足,不会一直在那等待。

举个简单的例子:

假如我要读取一个文件中的内容,如果此时文件中没有内容可读,对于阻塞来说就是会一直在那等待,直至文件中有内容可读;
而对于非阻塞来说,就会直接返回一个标志信息告知文件中暂时无内容可读。

这就是阻塞和非阻塞的区别。也就是说阻塞和非阻塞的区别关键在于当发出请求一个操作时,如果条件不满足,是会一直等待还是返回一个标志信息。

五、形象的例子

故事:老王烧开水。

出场人物:老王,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

老王想了想,有好几种等待方式
1、老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没		----------同步阻塞
老王想了想,这种方法不够聪明。

2、老王还是用水壶煮水,不再傻傻的站在那里看水开,跑去寝室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就走人。		----------同步非阻塞
老王想了想,现在的方法聪明了些,但是还是不够好。

3、老王这次使用高大上的响水壶来煮水,站在那里,但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他。		----------异步阻塞
老王想了想,不会呀,既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢,嗯,得换个方法。

4、老王还是使用响水壶煮水,跑到客厅上网去,等着响水壶自己把水煮熟了以后通知他。		----------异步非阻塞
老王豁然,这下感觉轻松了很多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值