同步异步阻塞非阻塞的概念理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同步异步阻塞非阻塞的概念理解相关的知识,希望对你有一定的参考价值。

 

网络通信中的同步和异步机制描述通信模式。同步机制,是指发送方发送请求后,需要等待接收到接收方发回的响应之后,才开始发送下一个请求;异步机制,正好相反,是指发送方在发送一个请求之后,不等待接收方响应这个请求就继续发送写一个请求。所有来自发送方的请求将形成一个队列,接收方处理完请求之后通知发送方。

而阻塞和非阻塞是用来描述进程的处理调用的方式,实际上也就是网络套接字Socket的阻塞和非阻塞方式,而Socket的实质也就是IO操作。Socket的阻塞调用方式为,在调用IO结果返回之前,当前线程从运行状态被挂起,一直等待到调用结果返回之后才被唤醒,进去就绪状态,获得CPU后继续执行;非阻塞调用方式正好相反,在非阻塞调用方式中,如果调用结果不能立刻返回,当前线程不会被挂起,而是立即返回执行下一个调用。

 

这四个概念两两组合就可以产生四中不同的处理方式:

 

同步阻塞方式 :                                                                                                   

发送方向接收方发送请求后,一直等待响应;接收方在处理请求时候如果IO操作不能马上得到结果,就会一直等待到返回结果后在响应发送方,期间不能进行其他工作。

例如:在超市排队付账的时候,客户(发送方)向营业员(接收方)付款(发送请求)之后需要等待收款员找零,期间不能做其他事情;而收款员要等待收款机返回结果

(IO操作)之后才能把零钱取出来交给客户(响应请求),期间也只能等待,不能做其他事情。这种方式实现简单,但是效率很低。

 

同步非阻塞方式 :                                                                                                

发送方向接收方发送请求后,一直等待响应;接收方出请求时进行的IO操作如果不能马上得到结果,就立即返回,去做其他事情,但由于得到请求的处理结果,不响应

发送方,发送方一直等待。一直到IO操作完成,接收方得到请求结果响应发送方的请求时,发送方才进行下一次请求过程。实际不使用这种方式。

 

异步非阻塞方式 :                                                                                                

发送方向接收方发送一个请求之后,不用等待响应,可以继续其他工作;接收方处理请求时进行的IO操作如果不能马上得到结果,就一直等待返回结果后,在响应发送方,

期间不能做其他事情。这种方式在实际中也不使用。

 

异步非阻塞方式 :                                                                                                

发送方向接收方发出请求后,不用等待响应,可以直接进行下一次请求或者其他工作,接收方处理请求时进行IO操作如果不能立刻得到结果,也不用等待,而是返回去做其

他事情。当IO操作完成之后,将完成的状态和结果通知接收方,接收方再响应发送方。继续之前超市付款的例子:客户(发送方)向营业员(接收方)付款(发送请求)后

在等待收款找零的时候,还可以做其他事情,比如打电话、聊天;而收款员在等待收款机处理交易(IO请求)的过程中也可以帮助客户将商品打包,当收款机返回结果后收

款员给客户结账(响应请求)。在四种方式中,这种方式是发送方和接收方通信效率最高的一种。

以上是关于同步异步阻塞非阻塞的概念理解的主要内容,如果未能解决你的问题,请参考以下文章

概念理解之同步,异步,阻塞,非阻塞

正确理解同步/异步和阻塞/非阻塞的区别:

深入理解非阻塞同步IO和非阻塞异步IO

nginx异步非阻塞理解

聊聊同步异步阻塞与非阻塞

同步/异步/阻塞/非阻塞