什么是同步和异步,阻塞和非阻塞

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

很多同学可能会认为同步就是阻塞,异步就是非阻塞,非也。


这四个槪念两两组合,会形成4个新的槪念,如下:
1.同步阻塞:客户揣发送请求给服务揣,此时服务端处理任务时间很久,则客户端则被服务端堵塞了,所以客户端会一直等待服务端的响应,此时客户端不能做其他任何事,服务端也不接受其他客户揣的请求。这种通信机制比较简单租暴,但是效率不高。


2.同步非阻塞:客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候虽然客户端会一直等待响应,但是服务端可以处理其他的请求,过一会回来处理原先的。这种方式很高效,一个服务端可以处理很多请求,不会在因为任务没有处理完而堵着,所以这是非阻塞的。


3.异步阻塞:客户揣发送请求给服务端,此时服务端处理任务时间很久,但是客户端不会等待服务器响应,它可以做其他的任务,等服务器处理完毕后再把结果响应给客户端,客户端得到回调后再处理服务端的响应。这种方式可以避免客户端一直处于等待的状态,优化了用户体验,其实就是类似于网页里发起的ajax异步请求。


4.异步非阻塞:客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候的任务虽然处理时间会很久,但是客户端可以做其他的任务,因为他是异步的,可以在回调函数里处理响应;同时服务端是非阻塞的,所以服务端可以去处理其他的任务,如此,这个模式就显得非常的高效了 。


以上厕所为例:
•同步就是我需要自己每隔一段时间,以轮训的方式去看看有没有空的坑位;
•异步则是有人拉完茅坑会通知你,通知你后你再回去蹲;
•阻塞就是在等待的过程中,你不去做其他任何事情,干等着;
•非阻塞就是你在等待的过程中可以去做其他的事,比如抽烟、喝酒、烫头、玩手机。


小结:异步的优点显而易见,大大优化用户体验,非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程或线程,大大地节省了系统的资源,如此多出来的系统资源可以给其他的中间件去服务了。

猜你喜欢

转载自blog.csdn.net/qq_41750725/article/details/105981303