同步与异步、阻塞与非阻塞区别
为了弄清这几个概念还和同事讨论了一番,然后还查了一些资料,总结一下。
同步与异步是在客户端向服务端发请求的时候,客户端做出的处理方式。
同步:客户端向服务端发出一个请求,客户端就一直在等着服务端的返回结果。
异步:客户端向服务端发出一个请求并向服务器说:你处理完了通知我一声哦,我就不在这儿一直等着了。
阻塞与非阻塞是发起任务的人(线程)的当前状态。
阻塞:线程A执行到某一行因为X(花费时间)被阻塞了,就一直等待X先执行完了再执行线程A。(挂起)
非阻塞:线程A执行到某一行因为X(花费时间)被阻塞了,就不管X了,接着处理线程A后面的程序。(运行)
自己想到在食堂打饭的例子:
同步:我到食堂打饭,阿姨给我了一个排号,我拿着排号一直等在窗口等待到端饭。
异步:我到食堂打饭,阿姨给我了一个排号,我就坐在食堂板凳上,等阿姨叫我这个号我再去端饭。
所以同步与异步强调的是处理方式。
阻塞:我在等着端饭的过程中,我什么事情也不干,就这样一直等着。
非阻塞:我在等着端饭的过程中,我拿起手机看了看新闻。
所以阻塞与非阻塞强调的是线程的状态。
所以又推演出同步阻塞、同步非阻塞和异步阻塞、异步非阻塞概念。
这样理解起来就不会搞混淆了。