同步与异步:
获取结果(通信方式)的方式不同,
调用者调用方法后,调用者去获取方法的结果,这就是同步
调用者调用方法后,方法自己去处理结果,然后处理完通知调用者,这就是异步
阻塞与非阻塞:
在调用者调用方法后,结果没有之前,调用者是否可用做其他事情
调用者调用方法后,结果没有之前,调用者不可以去做其他事情,这就是阻塞
调用者调用方法后,结果没有之前,调用者可以用去做其他事情,这就是非阻塞
同步阻塞:调用者调用方法后,结果没有之前调用者要去获取方法的结果,调用者要一直等待方法产生结果,才可以去做其他事情
同步非阻塞:调用者调用方法后,结果没有之前调用者要去获取方法的结果,调用者此时不必等待方法产生结果,可以去做其他事情,然后在做其他事情时通过问询的方式最终获取方法的结果
异步非阻塞:调用者调用方法后,结果没有之前方法自己处理结果然后处理完通知调用者,调用者此时可以去做其他事情,也不用问询,方法自己通过回调或者消息通信等方式通知调用者
注意:
同步阻塞、同步非阻塞、异步非阻塞它们之间只有应用场景不同,没有优劣之分,并不一定说异步非阻塞就比同步阻塞高明
至于异步阻塞这个鬼,我是真没听说过哪里有用到
以下是个人的一些理解(结合了某乎高赞)
同步阻塞:你打电话告诉书店老板你要买某书,老板拿起电话后说:“我不知道有没有货,现在去查“此时没有挂断电话,老板没有告诉你结果,你什么也不知道,在得到任何结果之前,你一直拿着电话干等,你此时什么也干不了就在等。30分钟后老板说有货,这时你去书店拿书。你去书店拿书,这是同步。你一直拿着电话等结果不可以做其他事情,这是阻塞。
同步非阻塞:你打电话告诉书店老板你要买某书,老板拿起电话后说:“我不知道有没有货,现在去查”便挂了电话,又过了10分种你第二次打电话问结果,老板拿起电话说完“还没有查到,你再等会儿”便挂断电话。挂断电话5分钟后老板查到有书,但并没有主动打电话告诉你。你再次等待10分钟后第三次电话老板问结果,老板说“书有了”,你断挂电话。然后你去书店拿书,这是同步。每10分钟打电话询问结果(问询),期间可以做其他的事情,这是非阻塞。
异步非阻塞:你打电话过去后问书店老板有没有某书,老板说:“我不知道有没有货,现在去查,有货我直接给你送上门”就挂掉电话。然后你想干嘛干嘛。老板主动给你送书上门,这是异步。挂了电话后你就想干嘛干嘛可以做其他事情,也不用打电话问结果了,这是非阻塞。
异步阻塞:你打电话过去问书店老板有没有某书,老板说:“我不知道有没有货,现在去查,有货了给你送上门“就挂掉电话。然后每过10分钟你就打电话问老板结果,在老板没说有货还是没货期间,你每过10分钟都会打电话问老板,等电话问出结果期间你什么也不干,有结果后老板送书上门。老板主动送书上门,这是异步。等待老板的电话期间你不可以做其他事情,这是阻塞。
以上只是个人理解,有疑问欢迎指出