在日常工作中,事情通常是一件一件地去做,做完一件再做下一件。比如,有了需求之后才能开始设计产品原型,设计出了产品原型之后才能再拉大家一起来讨论业务需求,讨论清楚了才开始做。这种顺序或者线性做事的方式,在软件开发中叫做「同步模式」:也就是把A做完了再做B,把B做完了再做C。如果B没有做完,就会一直做B,直到做完为止。就像这样:
再说得更明白点就是:狗蛋找黑娃有急事,但他忘记了黑娃的电话号码,于是就去找二丫,二丫也不记得黑娃的电话,就在自己的手机里翻了半天,也没翻出来。于是又问自己的闺蜜三丫、四丫......一直问到九丫都没问到。在二丫找电话号码的时候,狗蛋因为没有别的办法,只好干等着,也没法做其他的事情。这种「干等」的情况,在软件工程中有一个专有名词:叫「阻塞」——跟下水道被堵了是一个意思。
为了改进这种既让人着急又有点恶心的工作方式,科学家和工程师们的改进方法是:如果暂时做不了,那就先放着,去干点别的吧!
于是,软件的开发过程就变成了这样子:
工程师们还给这种方式取了一个优雅的名字:「异步」模式(总不能说成「因为你不能干等着,所以干脆去干点别的」)。这个也很好理解:
还是狗蛋找黑娃的例子,狗蛋在等二丫找电话的同时,自己也没闲着,也在问自己的哥们山鸡,自己同时还在电话薄里找,相当于同时使用了三种方式寻找黑娃的电话。这比之前啥都不干的方式要好多了,不用等二丫有结果了之后再找自己的通讯录或去问山鸡。
这种「异步」的方式,在软件开发中同样有一个专有词:叫「非阻塞」。
所以:
同步模式 = 阻塞模式
异步模式 = 非阻塞模式
至于实现它们的代码,网上有无数行。