简述同步异步、阻塞与非阻塞
欢迎指正
1.关于
- 1.1 涉及2个对象 调用方(函数,对象,变量....) 与 被调用方(函数)
- 1.2 涉及概念: 同步与异步 、阻塞与非阻塞
2.简述概念
计算是需要时间的,OS处理函数所需的时间也不尽相同,有长有短。 下面有例子,but先说概念:
- 2.1 同步: 调用方调用函数后,必须等待函数的返回结果,才能继续执行下一次调用。
- 2.2 异步: 调用方调用函数后,可以不用等待函数的结果,也可以执行下一次调用。
- 2.3 阻塞: 线程的状态之一,通俗理解为:线程暂停运行,一直等待某个结果,一旦得到结果,线程继续执行。这里说的是调用方所在线程。
- 2.4 非阻塞: 与2.3相反,调用方调用函数后,可以在被调用方(函数)运行期间做其他的事。
同步与异步:关注的是 被调用方怎么把数据返回给调用方
阻塞与非阻塞:关注的是线程的执行状态。
3.一个例子
类比生活中拿快递: 快递代收点与用户。 买到了自己心仪的宝贝, 当你收到代收点的通知,自己的宝贝已经到了,于是高高兴兴来到代收点:
- 3.1 同步: 此时,你对工作人员说:你好,我来取快递,取件码是XXX,谢谢。 工作人员:请稍等。工作人员立即搜寻你的包裹,然后再确认信息(收件人名或者电话号码),再将包裹交给你。
- 3.2 异步: 此时,你对工作员人说:你好,我来取快递,取件码是XXX,谢谢。工作人员:好的,请在3mins后来取。然后工作人员搜寻包裹或者处理其他事了,你在3min后再来拿包裹。
- 3.3 阻塞: 此时,你对工作人员说明来意是取快递并告知取件码。工组人员搜寻包裹的这段时间,你一直等待在这里,不能做其他的,眼巴巴的看着工作人员,真希望他能快点,等待工作人员将快递递给你。
- 3.4 非阻塞: 此时,你对工作人员说明来意是取快递并告知取件码。工组人员搜寻包裹的这段时间,虽然你一直等待在这里,但是在等待工作人员将快递递给你的这段时间内,你可以做点其他的,打开淘宝,浏览宝贝。
4.组合
接着上面的3的例子。
- 4.1 同步阻塞: 同步是说,工作人员正在为你搜寻,一旦找到,立即给你。阻塞是你在工作人员搜寻快递的时间内,什么都不能干,只能在这里傻傻的等着。
- 4.2 同步非阻塞: 同步是说,工作人员正在为你搜寻,一旦找到,立即给你。非阻塞是在这段搜寻包裹的时间内,你可以打开淘宝浏览器他的,而非傻傻的等着。
- 4.3 异步阻塞: 异步是说,工作人员说,找到包裹需要时间,你等个3分钟再来拿。阻塞是你站在一旁,傻傻的等着结果。
- 4.4 异步非阻塞:异步是说,工作人员说,找到包裹需要时间,你等个3分钟再来拿。非阻塞是你站在一旁,拿起自己的手机,继续逛淘宝,而非傻傻的等着。