理解阻塞非阻塞与同步异步

同步与异步

同步和异步关注的消息同步机制。

同步

所谓同步,就是发出一个调用时,在没有得到结果之前,该调用就不会返回。但是一旦调用返回,就得到返回值。也就是说,调用者主动等待这个调用结果。

异步

所谓异步,就是调用在发出之后,这个调用就直接返回,所以没有返回结果。也就是说,当一个异步过程调用发出之后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。

例子:
周末去餐厅吃饭,如果赶上饭点,以前的话,我们就得排队等待,这个过程中我们时不时地问是不是轮到我们,这是一件无聊而且浪费时间的事情。现在餐厅体谅我们的痛苦,让我们扫码关注餐厅的微信号公众号,实时更新当前就餐状态,这样我们就可以出去购物或者干自己喜欢的事情,只需要时不时的看一下手机,确认是不是轮到自己就餐。

在这个例子中我们排队等待主动询问是不是轮到我们就餐便是同步,我们通过微信号公众号得知我们就餐便是异步

阻塞与非阻塞

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。

阻塞

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

非阻塞

非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

接着上面的例子:
你关注了餐厅的微信号公众号后,你若果依旧在餐厅门口等候,而不去干别的,这个便是阻塞,若果你去购物或者干自己喜欢的事,只是时不时的看一下手机,确认是不是轮到自己,这便是非阻塞。

阻塞与非阻塞与是否同步异步无关,跟餐厅通过什么方式回答你结果无关。

推荐阅读:下面的链接是知乎上关于理解阻塞非阻塞与同步异步的探讨,其中响水壶的例子很生动。https://www.zhihu.com/question/19732473

你可能感兴趣的:(理解阻塞非阻塞与同步异步)