首先我们区分一下他们的概念。
1、 同步与异步:是一种消息通知机制,不是消息处理机制(消息处理是用户来自己完成的,即用户根据自己的需要来自己处理这些消息,消息通知机制只是通知用户是否有消息达到)。其中:
同步:是由用户(处理消息者)自己去等待消息是否被触发。
异步:是由触发机制来通知用户(处理消息者)。
2、 阻塞与非阻塞:是一种程序调用(例如I/O操作)等待返回消息时的状态,其中:
阻塞:程序调用在得到结果之前,当前线程会被挂起,只有当得到结果之后,程序调用才会返回。(由于挂起之后当前线程不会占用CPU的资源,所以从CPU的角度看,效率是高的。但从当前程序的角度看,其效率就值得再分析了)
非阻塞:程序调用即使在不能立即得到结果时,也能立刻返回,只是返回值与得到结果时的返回值不一样罢了。它是不会将当前进程挂起的。
那么,我们的程序就可以有四种组合,即:同步阻塞、同步非阻塞、异步阻塞、异步非阻塞。
1、 同步阻塞:
2、 同步非阻塞
3、 异步阻塞
4、 异步非阻塞
【参考资料】
1、http://blog.csdn.net/pcsuite/article/details/6190995 socket同步异步阻塞非阻塞区别
2、https://www.ibm.com/developerworks/cn/linux/l-async/ 使用异步 I/O 大大提高应用程序的性能