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

为了弄清这几个概念还和同事讨论了一番,然后还查了一些资料,总结一下。

同步与异步是在客户端向服务端发请求的时候,客户端做出的处理方式。

同步:客户端向服务端发出一个请求,客户端就一直在等着服务端的返回结果。

异步:客户端向服务端发出一个请求并向服务器说:你处理完了通知我一声哦,我就不在这儿一直等着了。

阻塞与非阻塞是发起任务的人(线程)的当前状态。

阻塞:线程A执行到某一行因为X(花费时间)被阻塞了,就一直等待X先执行完了再执行线程A。(挂起)

非阻塞:线程A执行到某一行因为X(花费时间)被阻塞了,就不管X了,接着处理线程A后面的程序。(运行)

自己想到在食堂打饭的例子:

同步:我到食堂打饭,阿姨给我了一个排号,我拿着排号一直等在窗口等待到端饭。

异步:我到食堂打饭,阿姨给我了一个排号,我就坐在食堂板凳上,等阿姨叫我这个号我再去端饭。

所以同步与异步强调的是处理方式。

阻塞:我在等着端饭的过程中,我什么事情也不干,就这样一直等着。

非阻塞:我在等着端饭的过程中,我拿起手机看了看新闻。

所以阻塞与非阻塞强调的是线程的状态。

所以又推演出同步阻塞、同步非阻塞和异步阻塞、异步非阻塞概念。

这样理解起来就不会搞混淆了。

原文地址:https://www.cnblogs.com/xubiao/p/6501654.html