阻塞非阻塞与同步异步的区别

来源:互联网 发布:宁化老鼠干 知乎 编辑:程序博客网 时间:2024/06/11 11:29
同步与异步:同步异步关注的是消息通信机制。如果调用方等待,直到调用方返回,就叫同步,反之,调用发出后直接返回就叫异步。异步情况下,被调用者会通过通知或者回调的方式处理这个调用。
阻塞与非阻塞:阻塞与非阻塞关注的是程序在等待调用结果(消息、返回值)时的状态。阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不阻塞当前线程。

由于同步情况下容易出现阻塞,异步情况下通常是不阻塞的,所以这两个概念很容易混淆。下面举一个具体例子说明:
例子:你打电话给你一个朋友,让对方帮忙买个火车票。
同步阻塞:你一直等待,直到你朋友买完火车票。
同步非阻塞:在等待朋友买票过程中,你还腾出时间干了别的事情,比如刷了牙,洗了脸。期间未挂断电话,你每隔一段时间,询问对方完成情况,直至买票成功。
异步阻塞:你打完电话,挂断,就什么也不干,只会干等,直到你朋友来电通知你买到票了。这种情况其实很容易避免。
异步非阻塞:你对你的朋友很有信心,打完电话就去干其他事情了,一会朋友来电买到票了。

原创粉丝点击