同步(Synchronous)和异步(Asynchronous)方法的区别

在讲之前,我们先来看《Computer Organization》中对于同步和异步的一个例子:

同步读写和异步读写的区别:

同步读写:以读为例

  1. 处理器在第一个时钟周期将一个内存地址放到地址总线中,这一过程可能涉及到多条状态总线。当地址线建立后,处理器发出一个信号。
  2. 处理器在第二个时钟周期对内存发出读的信号,内存中的一个模块识别输送过来的地址
  3. 一个时钟周期后,该模块将数据放到数据总线上
  4. 处理器读取数据并取消读的信号。

异步操作:以读为例

  1. 处理器将地址和数据放到对应的线上,在等待这些数据建立之后,将这些数据和读的命令一并发出
  2. 内存解码地址,将数据放到地址总线上
  3. 等到地址通道建立好后,内存中的模块通过ackownledged line(我不知道怎么翻译恰当···)通知处理器数据已经加载完成了
  4. master读取数据并取消读信号
  5. 4导致内存中的模块主动断掉数据连线和ackownledged line
  6. 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

同步(Synchronous)和异步(Asynchronous)方法的区别的更多相关文章

  1. 同步(Synchronous)和异步(Asynchronous)

    目录 概念性 图示例 举个例子 回到顶部 概念性 同步和异步通常用来形容一次方法调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步方法调用更像一个消息传递,一旦开始 ...

  2. 同步IO与一部IO、IO多路复用(番外篇)select、poll、epoll三者的区别;blocking和non-blocking的区别 synchronous IO和asynchronous IO的区别

    Python之路,Day9 , IO多路复用(番外篇)   同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. ...

  3. 阻塞IO、非阻塞IO、同步IO、异步IO等

    https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...

  4. Python_Day11_同步IO和异步IO

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...

  5. Atitit  五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I

    Atitit  五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I   1.1. .3 进程的阻塞1 1.2. 网络 ...

  6. 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  7. 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...

  8. python网络编程-同步IO和异步IO,阻塞IO和非阻塞IO

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...

  9. 同步请求和异步请求的区别,ajax异步请求如何理解

    同步请求和异步请求的区别 先解释一下同步和异步的概念 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的 ...

随机推荐

  1. LeetCode 216. 组合总和 III(Combination Sum III)

    题目描述 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 1: 输入 ...

  2. 连续子数组的最大和 java实现

    package findMax; /** * 连续子数组的最大和 * @author root * */ public class FindMax { static int[] data = {1,- ...

  3. LC 807. Max Increase to Keep City Skyline

    In a 2 dimensional array grid, each value grid[i][j] represents the height of a building located the ...

  4. 按二次back键退出程序应用的实现

    package com.loaderman.twoexitdemo; import android.os.Bundle; import android.os.Handler; import andro ...

  5. MongoDB 日志中出现“UserNotFound: Could not find user ceilometer@ceilometer”,如何解决?

    MongoDB 日志中出现“UserNotFound: Could not find user ceilometer@ceilometer” 问题描述 MongoDB(版本 3.2.9) 服务启动后, ...

  6. 【Linux】【四】linux 删除文件

      1.rm -f *     删除当前目录下的文件  application/file/test/tools/logs/   #最经典的方法,删除当前目录下的所有类型的文件 2.rm -rf /ro ...

  7. 使用PhantomJS

    PhantomJS是一个基于WebKit的服务器端JavaScript API.它全面支持Web而无需浏览器支持,不仅运行快,原生支持各种web标准:DOM处理.CSS选择器.JSON.Canvas, ...

  8. .NET制作滚动条

    今天,在工作的时候,刚好做到了滚动条,对这点不是很懂,所以,研究了一下,记录在这里,与大家分享. 对于前台页面,我们就只需要设置数据表的样式:style="overflow: auto; 即 ...

  9. (2)网络基础之IP

    IP分为IPV4和IPV6. 以下只讲IPV4,IPV6后期会重新分出来 (以下均为个人理解,如果有误,欢迎提出.也希望如果转载,能通知我并注明转载信息,毕竟字也是我一个个码出来的.谢谢) IPV4地 ...

  10. javascrit-function中this的指向问题

    javascrit中this的指向 全局作用域或者普通函数中 this 指向全局对象 window. //直接打印 console.log(this) //window //function声明函数 ...