关于同步异步和阻塞非阻塞的理解~

昨天面试被问到了你如何理解同步和异步,我回答的乱七八糟,今天看了某位大佬的简书,总结一下同步异步,阻塞非阻塞!ヾ(o´∀`o)ノ

!!同步:

同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来不是太友好。**A调用B,B处理直到获得结果,才返回给A。
需要调用者一直等待和确认调用结果是否返回, 然后继续往下执行。
**

!!异步:

异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。**A调用B,B直接返回。无需等待结果,B通过状态,通知等来通知A或回调函数来处理。调用结果返回时, 会以消息或回调的方式通知调用者。**

举个例子:普通B/S模式(同步)AJAX技术(异步)

!!阻塞:

**A调用B,A被挂起直到B返回结果给A,A继续执行。
调用结果返回前,当前进程挂起不能够处理其他任务,一直等待调用结果返回。
**

!!非阻塞:

**A调用B,A不会被挂起,A可以执行其他操作。
调用结果返回前,当前进程不挂起, 可以去处理其他任务。
**

举个栗子!!帮助大家区分

::老王过年回家,想要缓存个斗罗大陆看看(由于没钱买会员,只能网站缓存(ಥ﹏ಥ)) ~

1.同步阻塞

老王在某个无提醒功能的网站上缓存斗罗大陆,老王一直停在网站页面缓存什么也不能干,等待视频缓存成功。

同步:没有提醒功能的网站(被调用者)

阻塞:老王(调用者)等待视频缓存成功,什么也不做(当前进程挂起)

总结:调用结果(缓存成功)返回前,进程挂起,等待调用结果返回,效率低。

2.异步阻塞

老王在某个有提醒功能(缓存成功会弹消息提醒)的网站缓存斗罗大陆,老王一直停在网站页面缓存啥也不干,等待视频缓存成功。

异步:有提醒功能的网站(被调用者),缓存成功会提醒老王。(调用结果返回时会通知进程)

阻塞:老王(调用者)等待视频缓存成功,啥都不做(当前进程挂起)

总结:虽然调用结果返回会通知进程,但是调用结果返回前,当前进程挂起。所以同样效率低这里我们可以看出,同步和异步是一种 消息通知机制, 是相对于被调用者而言的。

3.同步非阻塞

老王在某个没有提醒功能的网站缓存视频,然后去干其他事情,时不时来看看是否缓存成功(轮询),老万做其他事情的效率也不高。

同步:没有提醒功能的网站(被调用者),需要老王确认是否缓存成功。

非阻塞:老王(调用者)在缓存视频的时间,去做其他事。

总结:调用结果返回前不会阻塞当前进程,当前进程可以去做其他事情,但是需要通过轮询来确认调用结果是否返回,耗cpu性能,效率会比 1,2 高点,但是还不够高。

4.异步非阻塞

老王在某个有提醒功能的网站缓存视频,然后去做其他事情,在视频缓存成功时会提醒老王。

异步:有提醒功能的网站(被调用者),缓存成功会提醒老王。

非阻塞:老王(调用者)在缓存视频的时间,去做其他事。

总结:调用结果返回前当前进程可以继续做其他事情,函数调用完成后会以回调或者消息的方式通知进程,效率最高。

小结总结!!!

我们要区分开同步异步阻塞非阻塞,同步异步说的是被调用者结果返回时通知进程的一种通知机制阻塞非阻塞说的是调用结果返回前进程的状态,是挂起还是继续处理其他任务是相对于调用者而言的。

**python 的 tornado 框架就是一种异步非阻塞框架。**

后续有什么见解会持续更新哒,也可以滴滴我~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值