一篇博客让你彻底搞懂同步异步,阻塞非阻塞的含义和区别

222 阅读2分钟

做网络IO编程我们或多或少都会接触到同步、异步、阻塞、非阻塞等相关技术术语,但是到底什么是同步异步阻塞非阻塞,他们怎么定义的,有什么区别,很多童鞋可能一直处于一种半懂半懵逼的状态。

       针对同步,异步,阻塞,非阻塞四种情况,一般日常会有以下四种应用场景

       1、同步阻塞

       2、同步非阻塞

       3、异步阻塞

       4、异步非阻塞

       这里先通过四个小故事来简单讲一下同步异步阻塞非阻塞的应用场景

      1、同步阻塞

           小张去店里买衣服,店长告诉小张衣服没有了,小张就一直在店里等着,直到衣服有了才回家或者做其他事情。

      2、同步非阻塞

****小张去店里买衣服,店长告诉小张衣服没有了,小张不等了跑去买其他东西了,过一会又回来问店长有没有衣服。

      3、异步阻塞

           小张去店里买衣服,店长告诉小张衣服没有了,小张将自己电话给店长,告诉店长有衣服了给自己打电话,然后自己等在店里和店长大眼瞪小眼。

     4、异步非阻塞

           小张去店里买衣服,店长告诉小张衣服没有了,小张将自己电话给店长,告诉店长有衣服给自己打电话,然后自己跑去做其他事情了。

       通过上面四个小故事是不是对这些概念有点模糊的理解了呢。有没有感觉其中 “异步阻塞” 特别傻逼,哈哈其实我也是这么觉得的。

       其实说白了,同步异步,阻塞非阻塞是站在不同的角度来看待问题罢了,就上面的故事而言。我们对这些概念做一个最直接的阐释。

      同步:  小张主动找店长

       异步:  小张给电话给店长,让店长打电话给小张,(就是代码中常用的回调接口),简单说就是被动等待店长找小张

       阻塞:  小张买到衣服钱不能做其他事情

       非阻塞:  没有衣服,小张可以做其他事情

说到这个程度,其实同步异步,阻塞非阻塞的概念已经很明了了,希望对初学者菜鸟们有所帮助,告辞。