同步、异步和阻塞、非阻塞
1. 同步与异步
同步和异步主要关注的是消息通知机制。
同步调用发出后,调用者需要一直等待返回消息通知后,才能继续执行。 — 主动获取消息(消息通知)
异步调用发出后,调用者不能立即获得返回消息,立即返回完成调用,直到被调用者在完成后,通过状态、通知或回调来通知调用者。 — 被通知获取消息(消息通知)
2. 阻塞与非阻塞
阻塞和非阻塞主要关注的是线程等待消息通知时的状态。
阻塞调用发出后,调用者(当前线程)会被挂起,需要一直进行等待消息通知,中间不能执行其他业务,等待消息收到后才进行返回。 — 线程挂起(状态)
非阻塞调用发出后,调用者(当前线程)不会被阻塞挂起,而是立即返回。 — 线程不被挂起(状态)
3. 场景
w同学去书店买《Java从入门到放弃》这本书,问老板是否有书,然后老板在书店里面寻找………………
1. 同步阻塞:w同学一直在书店乖乖的等着,期间什么事都不做,直到老板告诉他结果
同步:等待现场通知
阻塞:等待通知过程中,期间什么事都不做,(状态:执着的死等)
2.同步非阻塞:w同学询问后就出去浪了,然后每一段时间来店里询问一下,直到老板告诉他结果
同步:等待现场通知
非阻塞:等待通知过程中,出去浪一圈,做别的事情,再回来询问消息(状态:半灵活)
3.异步阻塞:w同学询问后,给老板留了电话,就回家了,但是在家啥也不干就抱着手机等书店老板电话。
异步:等待电话通知
阻塞:等待电话通知的过程中,啥也不干(状态:很傻的死等)
4.异步非阻塞:w同学询问后,给老板留了电话,回家后该干什么就干什么,直到老板打电话过来。
异步:等待电话通知
非阻塞:等待电话通知的过程中,可以做其他的事情,只需要等电话通知(状态:灵活)
4.总结
同步与异步关注消息的通知机制,阻塞与非阻塞关注等待消息通知时的状态。同步状态,需要调用者自己去等待消息通知,异步状态,需要触发机制来通知调用者(如:回调)