经常遇到这几个词,对它们的概念以及相互之间的关系总是模糊,今天在网上找到一篇介绍得非常清楚的博文,记录一下,希望下回不要再弄混淆。
原文:http://blog.csdn.net/historyasamirror/archive/2009/06/15/4270633.aspx
http://blog.csdn.net/historyasamirror/archive/2010/07/31/5778378.aspx
所谓的同步和异步,在这里指的是application和kernel之间的交互方式。如果application不需要等待 kernel的回应,那么它就是异步的。如果application提交完IO请求后,需要等待“回执”,那么它就是同步的。
而阻塞和非阻塞,指的是application是否等待IO操作的完成。如果application必须等到IO操作实际完成以后再执行下面的操作,那么它是阻塞的。反之,如果不等待IO操作的完成就开始执行其它操作,那么它是非阻塞的。
异步阻塞IO和同步阻塞IO是一样的,应用程序都是一直等到IO操作成功之后(数据已经被写入或者读取),才开始进行下面的工作。异步阻塞IO的好处在于一个select函数可以为多个描述符提供通知,提高了并发性。