同步与异步 ,阻塞与非阻塞

1、同步与异步  ,阻塞与非阻塞

同步就是我强依赖你(对方),我必须等到你的回复,才能做出下一步响应。即我的操作(行程)是顺序执行的,中间少了哪一步都不可以,或者说中间哪一步出错都不可以,类似于编程中程序被解释器顺序执行一样;同时如果我没有收到你的回复,我就一直处于等待、也就是阻塞的状态。   异步则相反,我并不强依赖你,我对你响应的时间也不敏感,无论你返回还是不返回,我都能继续运行;你响应并返回了,我就继续做之前的事情,你没有响应,我就做其他的事情。也就是说我不存在等待对方的概念,我就是非阻塞的。


同步调用 == 阻塞调用???

当然不是!

阻塞和非阻塞强调的是程序在等待调用结果(消息,返回值)时的状态.  阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 对于同步调用来说,很多时候当前线程还是激活的状态,只是从逻辑上当前函数没有返回而已,即同步等待时什么都不干,白白占用着资源。

同步和异步强调的是消息通信机制 (synchronous communication/ asynchronous communication)。所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由“调用者”主动等待这个“调用”的结果。而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态、通知来通知调用者,或通过回调函数处理这个调用。

对于通知调用者的三种方式,具体如下:

  • 状态:即监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低。
  • 通知:当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。
  • 回调:与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数。


原文链接:真的理解同步和异步了吗?_o0非诚勿扰0o的博客-CSDN博客

可参考文章:(1 封私信) 怎样理解阻塞非阻塞与同步异步的区别? - 知乎 (zhihu.com)

同步与异步、并行与并发、阻塞与挂起_暗诺星刻的博客-CSDN博客

15 分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了! - 知乎 (zhihu.com)

你可能感兴趣的:(java)