ajax同步非阻塞,同步、异步、阻塞与非阻塞理解

同步跟异步,阻塞与非阻塞,这两组概念出现在IO操作中常常让人混淆不清,这里是根据自己想到的,看到的,学到的,整理了自己的理解。

这四个概念两两组合,会形成四个新的概念,如下:

1、同步阻塞 :客户端发送请求到服务端,此时服务端处理任务时间很长,则客户端被服务端堵塞了,所以客户端会一直等待服务端的相应,此时客户端不能做任何事情,服务端也无法接收到任何客户端的请求,这种通信机制简单粗暴,但是效率不高。

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

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

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

以上四点,除了第三点,其余的可以分别理解为BIO/NIO/AIO,如果你在面试过程中,面试官问你:请描叙一个BIO/NIO/AIO之间的概念跟区别,那么你就可以组织一下语言去回答他的问题,或者通过大白话的方式去跟面试官解释一下也是可以的。

接下来就给大家用大白话解释一下:

BIO:我去跟女朋友去吃海底捞,这个时候需要排队, 我就只能等别人出来之后我才能进去,此时啥也干不了,就只能在这儿等着,等过了一会有人出来了, 我就赶紧坐进去吃海底捞咯。

NIO:我去跟女朋友去吃海底捞,这个时候需要排队,没关系,我不着急, 我出去抽根烟慢慢陪女朋友逛逛街做做美甲等,弄完之后我在回来看看有没有空位,如果有我就进去吃海底捞,如果没有我在出去抽根烟或者我去打会游戏或者调戏调戏女朋友在回来看一下。

异步阻塞:我去跟女朋友去吃海底捞,这个时候需要排队,没事我等着,等有了新的空位,让服务员给我打个电话通知我就行了,通知了我, 我在进去,不通知我, 我就在这儿干等着。

AIO: 我去跟女朋友去吃海底捞,这个时候需要排队,没事,我一点儿也不着急,我去外面抽根烟玩个游戏跟女朋友调个情,等有了新的座位释放出来了,会有人通知我的,通知我了,我就可以进去吃了。

从刚刚的生活例子中可以看得出来:

同步 就是需要自己每隔一段时间,以轮询的方式去看看有没有新的空位。

异步 就是有了新的座位之后会通知你,通知你再回去吃海底捞。

阻塞 就是在等待的过程中,你不去做其他的事情,干等着。

非阻塞 就是你在等待的过程中可以去干别的事,比如抽烟,喝酒,玩手机,玩女朋友等等都行。。。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值