同步/异步这两个词不同领域的概念完全不同
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。同步通信中双方使用频率一致的时钟 ,它的分组相比异步则大得多,称为一个数据帧,通过独特的bit串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码后马上要开始接收数据了。同步这种方式中因为分组很大,很长一段数据才会有额外的辅助位负载,所以效率更高,更加适合对速度要求高的传输,当然这种通信对时序的要求也更高。
异步通信是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。
从数字电路的角度来说,以太网是典型的同步时序逻辑,它的时钟信号通过曼彻斯特编码(以前)或者4B/5B编码(现在)编码到了信号当中,接收方需要从信号当中使用锁相环解出这个时钟信号,这样发送方和接收方就有了一个同步的时钟信号。依靠这个同步的时钟信号接收方能够正确读取发送方发送的数据。实际上几乎所有的高速数字传输协议都是同步时序逻辑。
但是从软硬件接口的角度来看,这个过程又是异步的。计算机不会直接通过CPU指令操作当前正在发送的数据,而是通过一系列缓存,将数据送交到网卡,或者从网卡读取数据。计算机不关心网卡实际上在什么时候将数据发出,它只要将数据提交给网卡就可以继续进行其他任务了,实际上提交给网卡这样的工作通常也会使用DMA之类的方法。数据到来时也是一样的,网卡不会在接收到网络数据包第一个字节的时候就通知CPU处理,而是将接收到的数据先缓存起来,随时等待CPU或者DMA在合适的时候读取。这种有缓冲区的结构是典型的异步通信机制。
从socket接口上来看,又分为同步和异步两种,也可以叫做BLOCK/NONBLOCK。同步接口在不能发送数据或者接收数据时会阻塞,直到完成;异步接口则会通知你socket暂时不可用,让你使用epoll等机制等待。其实虽然非阻塞一般都叫做异步IO,真正的异步IO应该是使用信号通知机制的才算,但现在不太区分这个。实际上即使是所谓同步接口,在内核中仍然有缓冲区存在,只是用户态到内核态的这一层通信使用了同步的逻辑。所以说,对这个问题首先取决于你对同步/异步的定义,以及在哪一层上看问题。
作者: 指的是在下, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3880846.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论