同步异步(关注的是消息通信机制)
同步:调用者发出一个"调用",没得到结果之前,该"调用"不返回;一旦该"调用"返回,就得到结果。调用者主动等待"调用"的结果。
异步:调用者发出"调用"后,就立即返回,没有返回结果。当一个异步过程"调用"发出后,调用者不会立刻得到结果,而是在"调用"发出以后,由被调用者通过状态,通知来通知调用者,或者通过回调函数来处理这个"调用"。类似的框架有Node.js等。
对比:同步是做完一件事再做另一件事。而异步是同时做很多事情,某个事情有结果了再去处理(又一个新事情)
阻塞 非阻塞(关注的是程序在等待调用结果(消息,返回值)时的状态)
阻塞"调用":指的是"调用"结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。
非阻塞调用:指不能立刻得到返回结果之前,该"调用"不会阻塞当前线程。
对比:阻塞是等不到想要的结果就不走了。而非阻塞是有结果就带走,没有结果就空手而归。
Example:
水壶是被调用者,人是调用者。
同步&异步:普通水壶(同步):人等水开。响水壶(异步):水烧开了会发出响声提示人。
阻塞&非阻塞:人坐着等水开,水开了才能去做别的事情(阻塞)。人去玩等水开(非阻塞)。
通常:异步配合非阻塞,效率会高。
参考知乎的一篇文章:怎样理解阻塞非阻塞与同步异步