同步与异步:
同步是指两个或者多少个流程(行为)之间存在依赖关系,比如流程A必须等待流程B结束之后才能结束。反之异步就是没有依赖关系。
阻塞与非阻塞:
阻塞是指流程A在等待其他流程的结果期间,不能做其他事情,被挂起。反之,非阻塞就是可以做其他事情。
看了网上很多说法,都有 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞这些区分,就是因为这么个区分,让很多人理不清之间的关系。其实这么划分是不对的。
同步阻塞和同步非阻塞,很好理解,流程A在等待流程B完成,过程中能完成中是否可以做别的事。
但是,将异步也分了阻塞和非阻塞,就不对了。其实从概念上讲,根本没有“异步阻塞”这个说法。异步必然是非阻塞的。网上有说法是,等待通知,不能干其他事,称为异步阻塞,由于等待通知而阻塞,说明流程之间已经有了依赖关系,这已经不能称之为异步了,这是同步。并不是说交给其他线程去干就叫异步。
还看到一种说法:说同步异步是强调的消息通信方式,等待返回的叫同步,立刻返回的叫异步,那么请问,在这种概念下,怎么会有同步非阻塞这一说?还有各种文章说着说着就换了概念主体的,自相矛盾的就不提了。
同步异步,阻塞非阻塞,概念主体是不同的。请勿混淆。
ps. 除了AIO,其他的都是同步IO。