同步与异步的区别
同步:发送一个请求,等待返回,再发送下一个请求,同步可以避免出现死锁,脏读的发生。
异步:发送一个请求,不等待返回,随时可以再发送下一个请求,可以提供效率,保证并发。
同步与异步关注的是消息通信机制。
举个例子
你打电话问书店老板有没有《分布式架构》这本书,如果是同步通信机制,书店老板会说,你稍等,我查一下,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你,我查一下啊,查好了打电话给你,然后直接挂电话(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电话”这种方式来回调。
阻塞与非阻塞的区别
阻塞:进程给CPU传达一个任务之后,一直等待cpu处理完成,然后才执行后面的操作。
非阻塞:进程给CPU传达任务后,继续处理后续的操作,隔断时间再来询问之前的操作是否完成。这样的过程其实也叫轮询。
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。
举个例子
你打电话问书店老板有没有《分布式架构》这本书,如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果。
如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了,当然你也要偶尔过几分钟check一下老板有没有返回结果。
细细品读一下这两个例子,在不明白一个概念之前,我们可以通过通俗的例子去理解。