概述
同步与异步,阻塞与非阻塞,这两组概念出现在IO操作中常常让人混淆不清。
IO操作其实可以分为两个步骤:
请求IO操作和执行IO操作。
一般IO操作的过程是这样的:
发起IO操作的请求 ==> 执行IO操作 ==> 得到IO操作结果 ==> 将结果返回给IO操作的请求。
同步和异步
-
同步和异步是一种通信机制,涉及到调用方和被调用方;
-
关注的是IO操作的执行过程及结果的返回方式;不同点在于双方在这两各方面的行为方式。
如果调用方需要保持等到直到IO操作完成,得到被调用方返回的结果,则是同步的;
如果调用方在IO操作的执行过程中,不需要保持等待,而是在操作完成后被动的接受(通过消息或回调)被调用方返回的结果,则是异步的。
阻塞和非阻塞
- 阻塞和非阻塞是一种调用机制,只涉及到调用方;
- 关注的是IO操作执行的状态。
如果调用方等待IO操作完成后返回,则是阻塞的;
如果调用方不需要等待IO操作完成就立即返回,则是非阻塞的,一般非阻塞需要多次查看,才能获得IO操作的结果,会大量占用CPU的时间。