同步、异步、阻塞、非阻塞的区别(科普版)

关于同步,异步,阻塞、非阻塞的概念,看了好多遍,但时间一长又很容易忘记,这篇科普版算为以后的自己降低学习成本吧。

 

同步(Synchronous)和异步(Asynchronous):

同步和异步通常用来形容一次方法调用。

同步,指调用者调用方法时,被调用方不立刻返回结果,而是等被调用方处理完事情后才会给调用者返回结果。

异步,指调用者调用方法时,被调用方立即返回,等处理完结果再向调用者返回结果。

 

用生活场景举个例子吧:我和朋友去奶茶店,我--方法调用者,奶茶卖家--被调用者,朋友--先打着酱油。

基于以上场景。若我是同步调用买奶茶的方法,那么画风是这样的:我点一杯奶茶,然后奶茶卖家不理我,卖家等奶茶制作完毕才把奶茶给我。若我是异步调用买奶茶的方法呢,就是我点了奶茶后,奶茶卖家回复我:“好的”,然后卖家根据他的档期开始制作奶茶,至于奶茶能不能做出来给我就不一定了。同步强调的是得到结果才返回,异步强调的是调用方法立刻返回。

 

阻塞(Blocking)和非阻塞(Non-Blocking)

阻塞和非阻塞通常用来形容方法调用者或者被调用者的状态。

阻塞:指调用者调用方法后,调用者必须等待方法返回结果,处理完毕后,才能继续执行其他方法。

非阻塞:指调用者调用方法后,调用者可以执行其他任务,等调用方法返回结果再对该结果进行处理。

 

继续拿奶茶举例子吧:我和朋友去奶茶店,对于方法调用者--我来说,我现在有两个方法可以调用,第一个是向奶茶卖家点一杯奶茶,第二个是和我的朋友聊天。对于第一个方法,我向奶茶卖家点一杯奶茶(调用者调用方法),然后店家开始根据我点的奶茶开始制作(被调用方法执行任务),最终做好一杯奶茶给我(被调用方法返回结果),我喝奶茶(调用方法返回结果后,调用者对返回结果做处理)。第二个方法,我向朋友发起技术的聊天请求,然后朋友和我聊天,最终得到的结果是我又学到新的技术知识。

基于以上场景。若我是阻塞的,那么画风是这样的:我点了一杯奶茶,然后苦等奶茶卖家做好奶茶给我,等奶茶这期间我不会做其他任何事情,只有卖家做好奶茶给我,我喝完奶茶,才会和朋友聊天。若我是非阻塞的呢,想必你也猜到了,就是我点了奶茶后,和朋友谈笑风生,等卖家做好奶茶的时候通知我,我再喝奶茶就行了。

 

当理解了上面的场景,再把线程,进程,IO等词汇替代上文的调用者和被调用者,就好理解的多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章