同步(Synchronous)和异步(Asynchronous)方法的区别
在讲之前,我们先来看《Computer Organization》中对于同步和异步的一个例子:
同步读写和异步读写的区别:
同步读写:以读为例
- 处理器在第一个时钟周期将一个内存地址放到地址总线中,这一过程可能涉及到多条状态总线。当地址线建立后,处理器发出一个信号。
- 处理器在第二个时钟周期对内存发出读的信号,内存中的一个模块识别输送过来的地址
- 一个时钟周期后,该模块将数据放到数据总线上
- 处理器读取数据并取消读的信号。
异步操作:以读为例
- 处理器将地址和数据放到对应的线上,在等待这些数据建立之后,将这些数据和读的命令一并发出
- 内存解码地址,将数据放到地址总线上
- 等到地址通道建立好后,内存中的模块通过ackownledged line(我不知道怎么翻译恰当···)通知处理器数据已经加载完成了
- master读取数据并取消读信号
- 4导致内存中的模块主动断掉数据连线和ackownledged line
- ackownledged line断掉之后,master消除地址信息
同步的一个问题在于,“all devices on a synchronous bus are tied to
a fixed clock rate, the system cannot take advantage of advances in device performance ”,这一点也好理解,同步读要求内存在一个时钟周期中准备好数据,也要求CPU在一个时钟周期中准备好address line\signal line的标识,但是CPU和内存的速度差异是很大的,当然一个时钟周期已经是最小单位了,但是如果再慢一点的设备呢,它就没有办法赶上这条bus这么快的速度了。而“With asynchronous timing, a mixture of slow and fast devices, using older
and newer technology, can share a bus ”,可以理解:由于异步方法是靠信号进行控制的,并不依赖于时钟,所以使得各种设备都能在一条bus上运行。
贴上两个其他博主的解释:
同步和异步通常用来形容一次方法调用。
同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。
————————————————
版权声明:本文为CSDN博主「半笙彷徨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wang704987562/article/details/79827609
同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。是一种线性执行的方式,执行的流程不能跨越。一般用于流程性比较强的程序,比如用户登录,需要对用户验证完成后才能登录系统。
异步则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。是一种并行处理的方式,不必等待一个程序执行完,可以执行其它的任务,比如页面数据加载过程,不需要等所有数据获取后再显示页面。
他们的区别就在于一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式,比如日志记录就可以使用异步方式进行保存。
————————————————
版权声明:本文为CSDN博主「shiyonghm」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shiyong1949/article/details/80854656