在网络通讯中,常常能够看到有人将同步和阻塞等同、异步和非阻塞等同。事实上,这两对概念有必定的区别,不能混淆。两对概念的组合,就会产生四个新的概念,同步阻塞、异步阻塞、同步非阻塞、异步非阻塞。网络
看了https://www.zhihu.com/question/19732473?sort=created&page=3中对这四个概念的讲解后,异步
一、同步阻塞方式,发送方向接收方发送请求后,一直等待响应;接收方处理请求时进行的IO操做若是不能立刻获得结果,就一直等到返回结果后,才响应发送方,期间不能进行其余工做。好比,在超市排队付帐时,客户(发送方)向收款员(接收方)付款(发送请求)后须要等待收款员找零,期间不能作其余的事情;而收款员等待收款机返回结果(IO)操做后才能把零钱取出来交给客户(响应请求),期间也只能等待,不能作其余事情。这种方式实现简单,可是效率不高。性能
二、同步非阻塞方式,发送方向接收方发送请求后,一直等待响应;接收方处理请求时进行的IO操做若是不能立刻获得结果,就当即返回,去作其余事情,但因为没有获得请求处理结果,不响应发送方,发送方一直等待。一直到IO操做完成后,接收方得到结果响应发送方后,接收方才进入下一次请求过程。在实际中不使用这种方式。学习
三、异步阻塞方式,发送方向接收方发送请求后,不用等待响应,能够接着进行其余工做;接收方处理请求时进行的IO操做若是不能立刻获得结果,就一直等到返回结果后,才响应发送方,期间不能进行其余工做。这种方式在实际中也不使用。线程
四、异步非阻塞方式,发送方向接收方发送请求后,不用等待响应,能够继续其余工做;接收方处理请求时进行的IO操做若是不能立刻获得结果,也不等待,而是立刻返回去作其余事情。当IO操做完成之后,将完成状态和结果通知接收方,接收方再响应发送方。继续使用在超市排队付帐的例子。客户(发送方)向收款员(接收方)付款(发送请求)后在等待收款员找零的过程当中,还能够作其余事情,好比打电话、聊天等;而收款员在等待收款机处理交易(IO操做)的过程当中还能够帮助客户将商品打包,当收款机产生结果后,收款员给客户结帐(响应请求)。在四种方式中,这种方式是发送方和接收方通讯效率最高的一种。同步
再记录一下我对他们的简单理解io
1.同步与异步针对的是客户端,同步是指客户端要一直等待服务端返回结果,期间不能作其余事情,异步是指客户端无需等待服务端结果,能够作其余事情效率
2.阻塞和非阻塞针对的是服务端,阻塞是指服务端对客户的请求执行系统I/O操做时要等待系统给出结果,期间不能作其余事情,非阻塞是指服务端把请求交给系统I/O后,能够作其余事情,而且会轮询查看以前的请求系统是否给出结果,给出就返回,再处理下一个,没给出就直接处理下一个打包
3.同步非阻塞方式在实际中不使用是由于这样客户对会一直须要等待,由于服务端不会专门开一个线程服务该客户端的请求,因此客户端体验是最差的请求
4.异步阻塞方式也不在实际中使用是由于客户端能够一直对服务端进行操做,致使服务端压力很大,须要很是多的线程来维护请求,因此这要求服务端的性能很是高才行
只是简单理解,会有不少不许确的地方,后面再深刻学习改进