什么是同步通信与异步通信?它的工作原理是什么?
同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。
好的,我们来详细解释一下同步通信与异步通信的区别和工作原理。
核心区别在于:通信双方的“协调”和“等待”方式不同。
1. 同步通信 (Synchronous Communication)
- 定义: 通信的发送方和接收方必须严格地在时间上协调一致才能进行数据交换。发送方发送信息后,会主动等待并阻塞,直到明确收到接收方对该信息的确认(ACK)或回应后,才能继续执行后续操作。
- 工作原理:
- 请求/发送: 发送方发起请求或发送数据。
- 等待/阻塞: 发送方暂停(阻塞) 自己当前的任务执行,等待接收方的回应。在此期间,发送方的资源(如线程、进程)通常被占用,不能做其他事。
- 处理与回应: 接收方收到请求/数据后进行处理。
- 响应: 接收方处理完毕,发送明确的回应(可能是结果数据、确认ACK或错误信息)给发送方。
- 继续: 发送方收到回应后,解除阻塞,继续执行后续操作。
- 特点:
- 强耦合: 双方必须同时处于活动状态且保持连接。
- 阻塞: 发送方必须等待回应,期间无法执行其他任务(资源可能被低效占用)。
- 时序要求严格: 操作严格按照请求->等待->回应->继续的顺序进行。
- 易于理解: 流程直观,符合线性思维。
- 常见例子:
- 打电话(必须双方同时在线交流)
- 传统HTTP请求(浏览器发起请求,等待服务器响应整个页面,期间“白屏”或“转圈”)
- 数据库操作中的
SELECT查询(等待数据库返回结果集) - 文件读写操作(等待磁盘I/O完成)
- 远程过程调用(某些实现如gRPC默认使用同步风格)
2. 异步通信 (Asynchronous Communication)
- 定义: 通信的发送方和接收方在时间上不需要保持严格同步。发送方发送信息后不等待接收方的即时回应,而是立即继续执行自己的后续任务。接收方在准备好回应或需要传递信息时,主动或通过回调机制通知发送方。
- 工作原理:
- 请求/发送: 发送方发起请求或发送数据。
- 继续执行: 发送方不等待回应,立即继续执行自身的其他任务。数据/请求被交给一个中间机制(如消息队列、回调函数、事件循环、单独的线程/进程)负责后续传递和处理。
- 处理: 接收方(或者指定的处理程序)在之后的某个时间点接收到并处理请求/数据。
- 响应/通知: 处理完成后:
- 方式A (回调/通知): 接收方(或代理)通过调用发送方预先注册好的函数(回调函数) 或发送事件通知的方式将结果或状态告知发送方。
- 方式B (轮询): 发送方可以定期主动查询(轮询)之前发出的请求是否完成。
- 方式C (队列/解耦): 结果放入队列,发送方后续从队列中获取(更彻底的解耦)。
- 处理响应(可选): 发送方在收到回调、通知或轮询到结果后,再择机处理该响应。
- 特点:
- 弱耦合: 双方在时间上是解耦的,不需要同时活动,甚至可能不知道对方具体是谁(通过中间件)。
- 非阻塞: 发送方无需等待,资源不会被长时间占用,可以同时处理多个请求或任务,提高并发性和响应能力。
- 时序灵活: 请求发送和结果处理在时间上可以分开。
- 提高吞吐量: 发送方可以更快地发出更多请求,避免因等待I/O而空转。
- 复杂性增加: 需要处理回调、事件、状态管理、错误恢复等,代码逻辑可能更复杂。
- 常见例子:
- 发短信/邮件/微信消息(发送完就可以去做别的事,等对方有空再回复)
- Ajax调用(浏览器发起请求后页面不刷新,可以继续操作,等服务器返回数据再用JavaScript更新页面局部)
- 消息队列(RabbitMQ, Kafka等) - 生产者发布消息到队列后即完成,消费者从队列获取消息处理。
- 事件驱动架构(处理事件,触发回调)
- 文件读写操作(使用非阻塞I/O +
select/poll/epoll/aio等) - 数据库操作中的异步查询
总结对比表
| 特性 | 同步通信 (Synchronous) | 异步通信 (Asynchronous) |
|---|---|---|
| 协调方式 | 发送方和接收方必须严格同步时序 | 发送方和接收方在时间上解耦 |
| 发送方行为 | 发送后阻塞等待回应 | 发送后立即继续执行,不等待 |
| 接收方行为 | 必须在连接状态下即时处理并回应 | 可在稍后处理,完成后通过回调/通知/轮询告知 |
| 资源利用率 | 可能较低(等待期间资源闲置) | 较高(发送方可同时处理其他任务) |
| 响应速度感知 | 操作总耗时包含等待时间 | 发送方可更快获得“已提交”响应,但最终结果稍后到 |
| 耦合度 | 较高(双方紧密依赖,需实时连接) | 较低(可通过中间件解耦) |
| 时序 | 严格串行:请求->等待->响应->继续 | 灵活:请求提交和结果处理可分时 |
| 复杂性 | 相对简单直观 | 相对复杂(回调链、状态维护、错误处理) |
| 典型应用 | 简单的请求-响应、实时交互、部分RPC | 高性能服务器、高并发系统、消息队列、UI响应、微服务通信 |
通俗比喻
- 同步: 像去银行柜台办事。你(发送方)递交申请单后,必须在窗口前排队等待(阻塞),直到柜员(接收方)处理完并把结果(回应)递给你,你才能离开办下一件事。
- 异步:
- 回调型: 像去餐厅点单。你(发送方)告诉服务员要吃什么(发送请求),然后就可以回座位刷手机(继续执行),不用站在柜台前等。服务员(接收方/中间代理)后厨下单,等厨师做好(处理完成),服务员再把菜端到你桌上叫你(回调通知)。
- 队列型: 像寄快递。你把包裹交给快递员/投入快递柜(放入消息队列),就完成了。快递公司(中间件)负责运输,收件人(接收方)在方便的时候签收处理。你和收件人无需同时在线。你可能会收到一个快递单号用于后续查询状态(类似提供ID用于轮询或关联响应)。
理解这两种通信模式对于设计和开发高效、响应迅速的软件系统(特别是涉及网络、I/O操作时)至关重要。
什么是同步通信与异步通信?它的工作原理是什么?
同步通信的原理是发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如:在时钟信号的上升沿的时候,将数据发送出去)发送数据。接收端根据发送端提供的时钟信号,以及双方的约定,接收数据
2023-11-07 08:07:32
关于STM32的串行异步通信
【串行异步通信】STM32F4 的串口资源相当丰富的,功能也相当强劲。STM32F407ZGT6 最多可提供 6 路串口,有分数波特率发生器、支持同步
资料下载
张文
2021-12-24 19:19:20
单片机串行通信UART(通用异步收发传输器)是如何工作的资料下载
电子发烧友网为你提供单片机串行通信UART(通用异步收发传输器)是如何工作的资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文
资料下载
佚名
2021-04-10 08:41:32
串行通信中的IIC总线工作原理是什么
串行通信中的IIC总线工作原理51本身不带IIC总线 ,使用程序模拟IIC通信协议常用的串行总线协议UART、1-wire、I2C和SPI总线U
异步通信和同步通信
(同步通信)通信。本节只对rostopic做一些简单的讲解,详细的了解可以前往ros的wiki上的rostopic。如果您还想了解servicr
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 芯片的工作原理是什么?
- ssd是什么意思
- 什么是蓝牙?它的主要作用是什么?
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- dtmb信号覆盖城市查询
- 怎样挑选路由器?
- 华为芯片为什么受制于美国?
- 元宇宙概念股龙头一览
- type-c四根线接法图解
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- BLDC电机技术分析
- 复位电路的原理及作用
- dsp是什么意思?有什么作用?
- iphone13promax电池容量是多少毫安
- 苹果无线充电器怎么使用?
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 传感器常见类型有哪些?
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机