我试图去搞明白它们的区别,但是发现网上很多的类别都非常的模糊。
其实对于程序员来说,不需要那么多类比,下面我自己从程序的角度来理解这个事情。
阻塞/非阻塞:只是描述函数调用是否立即返回,如果一定完成之后才返回,那么就是阻塞,如果调用立即返回(不是调用,而是通知了)就是非阻塞。
同步/异步:描述的是两个对象之间的操作的关系。 同步是a调用b的一个功能后,必须等到b返回,a才继续。而异步不用等待。所以异步必须要非阻塞才能实现。
但是同步可以使用阻塞或者非阻塞来实现。
总体来说,说的是一个事情,不过就是描述对象不同。
非阻塞是比较牛逼的。多路复用(select 方法)是一种杂交混合,标准的非阻塞都是用回调函数/中断/事件的方式来实现的。
大部分设计模式里面的事件循环,回调函数,就是通过设计的方式来把阻塞变成非阻塞。