同步和异步,阻塞和非阻塞-结合一个例子简单说明

作者: 人月聊IT分类: 计算机技术 发布时间: 2022-07-14 18:00:00 浏览:17052 次

同步和异步,阻塞和非阻塞-结合一个例子简单说明

一叶障百目:
总结一下: 同步:客户端或者请求的连接发送给服务端之后,需要一直等待服务端处理完。 异步:客户端或者请求的连接发送给服务端之后,不需要等待结果,可以直接返回,做其他操作,当服务端完成后,通过消息回写返回给客户端 阻塞:请求线程发送请求给处理线程后一直处于等待状态,不可以处理其他请求。 非阻塞:请求线程发送请求给处理线程后释放资源池,可以去处理其他请求,但是请求线程需要每隔一段时间轮训一下处理线程是否完成处理。若完成则返回结果到用户端。 异步情况下,会启用消息队列(包含一系列等待处理的线程)

明天什么不存在好不好:
只能说讲清楚了这些概念,但是举的一些例子不太合适,这些概念一般出现在网络io模型中,所谓的同步阻塞是指等待数据的到达,同步非阻塞则需要轮训查看数据是否到达,这里一般不涉及业务的计算过长问题。 你说的业务计算过长问题,一般是说前端同步请求问题,当然前端正常人不会去同步请求后端数据

【回复】回复 @爱折腾的浩子 :对本质上就是线程进入了阻塞状态,一般io请求(网络、磁盘)都会引起阻塞这个是操作系统处理,然而请求这个io操作的程序是否等待这个阻塞,又分为了阻塞和非阻塞。
【回复】回复 @明天什么不存在好不好 :好的,多谢
【回复】回复 @明天什么不存在好不好 : 感谢答疑。那么也就是客户端向服务端请求数据,客户端的等待是同步;服务端的请求线程(这个过程中相当于客户端)向处理线程请求数据,请求线程的等待是阻塞。 这么理解没问题吧
wthwinner2003:
同步和异步是一个逻辑概念。表示一次交互要的结果请求方和处理方是否时钟同源。阻塞和非阻塞是在线程层面的概念。

断章小浪:
同步异步,阻塞(se四声)非阻塞的共同点是都有是否等待的现象。但两者的区别是同步与异步是针对请求来说的,这个请求既可以是网络请求,也可以是本地IO请求。同步请求等待结果,好处是时序一致。异步请求则发送请求后就干别的去了,请求的结果须通过回调通知机制取回。而阻塞与非阻塞是针对线程来说的,这个跟操作系统原理和硬件DMA机制有关。阻塞的好处也是时序一致,易于理解。非阻塞则需要线程时不时地查询结果。是这样总结的吗?

倒一杯散装白酒:
通俗易懂,生动形象,讲的太好了[打call]

12216086808_bili:
同步异步看时钟同不同源,异步麻烦点;阻塞=常用在组合逻辑,非阻塞<=常用于时序逻辑[doge]

人间体验者:
请问关于协程,例如python的asyncio是属于异步的哪种呢?

wthwinner2003:
首先异步的行为是增加吞吐量。并不能节省结果的处理时间。阻塞和非阻塞是在线程层面说的。现实中的async和await是在实现一个概念层面的异步模型。其实现逻辑是要靠线程去实现。

【回复】回复 @wthwinner2003 :谢谢补充。
Weir面:
卧槽,终于理解了,看那些文章真的是越看越蒙

shaohuixia:
全部都是错误的 目前我还没有看到一个理解正确的 包括书籍里

【回复】这几个概念本来就比较模糊
fbossa:
顾客和服务员之间是同步和异步的关系,但是服务员和厨师之间也是同步和异步的关系呀,两个关系都是A是否要等待B才能继续处理其他事。 怎么到了服务员和厨师就成了阻塞和非阻塞呢?

【回复】回复 @fbossa :不能完全这样理解,同步异步针对请求连接来说的,阻塞是针对处理线程来说的。
【回复】回复 @人月聊IT :既然是针对不同场景,他们之间又是怎么两两组合的呢
【回复】回复 @人月聊IT : 意思是客户端和服务端是同步和异步,到后端内部就是改个叫法而已,叫阻塞和非阻塞吗?

NIO 同步 编程开发 IT行业 阻塞 异步 非阻塞

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!