精华内容
下载资源
问答
  • 异步 同步

    千次阅读 2007-01-13 11:15:00
    异步传输和同步传输指的是计算机组织传输数据采用的两种不同的格式。 异步传输以字符为单位组织数据,每个字符由8~11个二进制位组成 ,其中第一位称为起始位,作为一个字符开始的标志,接下来的部分是该字符的有效...

    1从微机原理角度看

    异步机制的传输效率高。异步传输和同步传输指的是计算机组织传输数据采用的两种不同的格式。

     异步传输以字符为单位组织数据,每个字符由8~11个二进制位组成 ,其中第一位称为起始位,作为一个字符开始的标志,接下来的部分是该字符的有效部分,可根据需要选取5、6、7或8个二进制位。有效字符位之后是1或2个停止位,用来标志字符的结束。最后一位是奇偶校验位,用来检查传输中的错误。这一位也可以不用。


    同步传输不是以字符为单位组织数据,而是将一定数量的二进制数据位  (如256位)按某种格式组装成帧(Frame)。每个帧由帧头(32  位)、数据(256位)和帧尾(24位)三部分组成。帧头通常包括帧的起始标志   (一个特别格式的字符)、地址和一些控制信息,帧尾则由16位CRC校验码  和帧结束标志组成。同步传输可利用帧尾的CRC校验码进行检错,利用帧头的控制信息实现流 控和差错控制。因此,其传输的可靠性比异步方式要高。而且,由于其传  
      输的有效数据位与传输的总的二进制位数之比要比异步传输高,因而其传 输效率较高。  

     
      在计算机或终端中,实现异步或同步数据格式的组装通常是由硬件的电路来实现的。微机的两个串行接口一般只提供异步格式的传输,因为在微机 主机或随机的插卡上集成了异步传输的接口电路。如果要进行同步通信,  
      如X.25网、IBM主机与终端的通信,需要在微机中另插一块同步通信卡。 现在,利用Modem进行异步传输也能够较好的结合同步传输的优点。尽管 在计算机与Modem之间采用异步格式传输,但Modem能将异步数据转换成同  
      步格式的数据,实现了Modem与Modem之间的差错控制和流量控制。   
     

    2 socket角度

    所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。  
       
      异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。  
       
      并不是说谁好谁不好,只是同步的机制不适合在正式应用的项目当中(但自己测试还是可以的)

    ///

     阻塞   代表着在调用后等待调用的返回,因此会将调用者和被调用者两个进程/线程进行一定意义上的协调,因此与   同步   对应  
      而异步   调用的返回结果通常通过信号/回调机制实现,不会发生等待调用返回的情况,因此应该是非阻塞的

    展开全文
  • postgresql,主从异步同步,当主库使用pg_dump备份时,为何从库需要出现大量需要同步的数据?
  • Python协程之异步同步区别

    千次阅读 2018-04-17 18:16:15
    一下代码通过协程、多线程、多进程的方式,运行代码展示异步同步的区别。 import gevent import threading import multiprocessing # 这里展示同步异步的性能区别,可以看到异步直接同时执行并完成, # 而同步...

    一下代码通过协程、多线程、多进程的方式,运行代码展示异步与同步的区别。

    import gevent
    import threading
    import multiprocessing
    # 这里展示同步和异步的性能区别,可以看到异步直接同时执行并完成,
    # 而同步,需要等待第一个完成后再次执行下一个,是有顺序的执行,而异步不需要
    import time
    
    
    def task(pid):
        gevent.sleep(0.5)
        print('Task %s done' % pid)
    
    def task2(pid):
        time.sleep(0.5)
        print('Task %s done'%pid)
    
    def synchronous():
        for i in range(1, 10):
            task(i)
    
    def asynchronous():
        threads = [gevent.spawn(task, i) for i in range(1,10)]
        gevent.joinall(threads)
    
    def thread_chronous():
        t_list = []
        for i in range(1,10):
            t = threading.Thread(target=task2,args=(i,))
            t.start()
            t_list.append(t)
        for j in t_list:
            j.join()
    
    def multi_chronous():
        t_list = []
        for i in range(1, 10):
            t = multiprocessing.Process(target=task2, args=(i,))
            t.start()
            t_list.append(t)
        for j in t_list:
            j.join()
    
    # 同步执行
    print('Synchronous:')
    synchronous()
    # 开启协程异步执行 自动切换函数
    print('Asynchronous:')
    asynchronous()
    # 开启线程异步执行
    print('Threading')
    thread_chronous()
    # 开启进程的异步执行
    if __name__ == '__main__':
        print('Multiprocess')
        multi_chronous()

    关于异步 同步的一些理解:
    同步和异步的区别就在于是否等待IO执行的结果。好比你去麦当劳点餐,你说“来个汉堡”,服务员告诉你,对不起,汉堡要现做,需要等5分钟,于是你站在收银台前面等了5分钟,拿到汉堡再去逛商场,这是同步IO。
    你说“来个汉堡”,服务员告诉你,汉堡需要等5分钟,你可以先去逛商场,等做好了,我们再通知你,这样你可以立刻去干别的事情(逛商场),这是异步IO。
    老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)老张觉得自己聪明了。所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。所谓阻塞非阻塞,仅仅对于老张而言。立等的老张,阻塞;看电视的老张,非阻塞。情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

    展开全文
  • 异步同步通信数据帧格式

    千次阅读 2020-07-10 13:52:52
    串行通信可以分为两种类型:同步通信、异步通信. 1. 异步通信的特点及信息帧格式: 以起止式异步协议为例,下图显示的是起止式一帧数据的格式: 图1 起止式异步通信的特点是:一个字符一个字符地传输,每个字符一位一位...
    串口扫盲六:异步通信方式
    </div>
    

    串行通信可以分为两种类型:同步通信、异步通信.

    1. 异步通信的特点及信息帧格式:

    以起止式异步协议为例,下图显示的是起止式一帧数据的格式:

    图1

    起止式异步通信的特点是:一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以"起始位"开始,以"停止位"结束,字符之间没有固定的时间间隔要求.每一个字符的前面都有一位起始位(低电平,逻辑值),字符本身由5-7位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位.停止位和空闲位都规定为高电平(逻辑值1),这样就保证起始位开始处一定有一个下跳沿.

    从图中可看出,这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起止式协议.

    异步通信可以采用正逻辑或负逻辑,正负逻辑的表示如下表所示:

     

    逻辑0

    逻辑1

    正逻辑

    低电平

    高电平

    负逻辑

    高电平

    低电平

    异步通信的信息格式如下边的表所示:

    起始位

    逻辑0

    1位

    数据位

    逻辑0或1

    5位、6位、7位、8位

    校验位

    逻辑0或1

    1位或无

    停止位

    逻辑1

    1位,1.5位或2位

    空闲位

    逻辑1

    任意数量

    注:表中位数的本质含义是信号出现的时间,故可有分数位,如1.5.

    例:传送8位数据45H(0100,0101B),奇校验,1个停止位,则信号线上的波形象图2所示那样:异步通信的速率:若9600bps,每字符8位,1起始,1停止,无奇偶,则实际每字符传送10位,则960字符/秒.

    图2

    2. 异步通信的接收过程

    接收端以"接收时钟"和"波特率因子"决定一位的时间长度.下面以波特率因子等于16(接收时钟每16个时钟周期,使接收移位寄存器移位一次),正逻辑为例说明,如图3所示.

    图3

    1. 开始通信时,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对"接收时钟"计数.
    2. 当计到8个时钟时,对输入信号进行检测,若仍为低电平,则确认这是"起始位"B,而不是干扰信号.
    3. 接收端检测到起始位后,隔16个接收时钟,对输入信号检测一次,把对应的值作为D0位数据.若为逻辑1, 作为数据位1;若为逻辑0,作为数据位0.
    4. 再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据.….,直到全部数据位都输入.
    5. 检测校验位P(如果有的话).
    6. 接收到规定的数据位个数和校验位后,通信接口电路希望收到停止位S(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置"帧错误"标志.若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中送数据输入寄存器.若校验错,在状态寄存器中置奇偶错标志.
    7. 本幀信息全部接收完,把线路上出现的高电平作为空闲位.

    当信号再次变为低时,开始进入下一幀的检测.

    3. 异步通信的发送过程

    发送端以"发送时钟"和"波特率因子"决定一位的时间长度.

     

    1. 当初始化后,或者没有信息需要发送时,发送端输出逻辑1,即空闲位,空闲位可以有任意数量.
    2. 当需要发送时,发送端首先输出逻辑0,作为起始位.
    3. 接着,发送端首先发送D0位,直到各数据位发送完.
    4. 如果需要的话,发送端输出校验位.
    5. 最后,发送端输出停止位(逻辑1).
    6. 如果没有信息需要发送时,发送端输出逻辑1,即空闲位,空闲位可以有任意数量.如果还有信息需要发送,转入第(2)步.

    对于以上发送、接收过程应注意以下几点:

    1. 接收端总是在每个字符的头部(即起始位)进行一次重新定位,因此发送端可以在字符之间插入不等长的空闲位,不影响接收端的接收.
    2. 发送端的发送时钟和接收端的接收时钟,其频率允许有一定差异,当频率差异在一定范围内,不会引起接收端检测错位,能够正确接收.并且这种频率差异不会因多个字符的连续接收而造成误差累计(因为每个字符的开始(起始位处)接收方均重新定位).只有当发送时钟和接收时钟频率差异太大,引起接收端采样错位,才造成接收错误.
    3. 起始位,校验位,停止位,空闲位的信号,由"发送移位寄存器"自动插入.在接收方,"接收移位寄存器"接收到一帧完整信息(起始,数据,校验,停止)后,仅把数据的各位送至"数据输入寄存器",即CPU从"数据输入寄存器"中读得的信息,只是有效数字,不包含起始位,校验位,停止位信息.
    展开全文
  • 网络get/post请求异步同步请求回调

    千次阅读 2016-05-12 18:55:02
    教你怎么写网络异步同步请求回调最近需要用到请求网络数据,在网上一直查找,都找不到,要么是说的不明白,之后我自己动手来实现了。网络回调,分为同步和异步,多数情况都会用异步,但是也有情况用到同步的。无论...

    教你怎么写网络异步同步请求回调

    最近需要用到请求网络数据,在网上一直查找,都找不到,要么是说的不明白,之后我自己动手来实现了。

    网络回调,分为同步和异步,多数情况都会用异步,但是也有情况用到同步的。

    无论同步异步,都必须要在子线程中去加载。

    首先写一个写一个网络请求接口。

    同步网络请求这里就说了,同步就是一直等待,等待他完成为止(有无结果)

    异步请求的回调才是我们要学习的重点

    比较有规范的通用回调接口

    class ResultCallback:
    public interface ResultCallback {
    
         void getReslt(String result);
    }
    

    请求网络的接口

    public class SongsProtocol extends BaseProtocol {
    public static void parse(String id, ResultCallback callback) {
        final RequestParams params = new RequestParams(HttpUrl.MUSICIANS_SONGS + id + "?type=yc|fc|bz&page="
                + SongsAdapter.page);
        resultCallback = callback;//实例化
    ------------------------------------------------------------------------
        x.http().get(params, new Callback.CommonCallback<String>() {
            Message message = new Message();
            @Override
            public void onSuccess(String result) {
                message.what = 0;
    
                message.obj = result;
                myHandler.sendMessage(message);
            }
    
            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                message.what = 1;
                myHandler.sendMessage(message);
                MyToast.show("加载错误,请稍后重试");
            }
            @Override
            public void onCancelled(Callback.CancelledException cex) {
                MyToast.show("加载取消,请稍后重试");
            }
            @Override
            public void onFinished() {
            }
        });
        //注意虚线之间的,我这里用xutils 3.0 这个是异步的,或者其他框架。当然你也可以用JAVA那个
    --------------------------------------------------------------------------
    }
    public  static Handler myHandler = new Handler() {
        @Override
        public void handleMessage(android.os.Message msg) {
    
            if (msg.what == 1) {
                resultCallback.getReslt("");
            } else if (msg.what == 0) {
                String result = (String) msg.obj;
                resultCallback.getReslt(result);
            }
        }
    
        ;
    };
    //声明抽象接口的变量
    static ResultCallback resultCallback = new ResultCallback() {
    
            @Override
            public void getReslt(String result) {
                // TODO Auto-generated method stub
            }
        };
    }
    

    在Activity中调用。

    声明 callback
    ResultCallback callback = new ResultCallback() {
        @Override
        public void getReslt(String result) {
            if (result.isEmpty()) {
                return;
            }
            Gson gson = new Gson();
            MusiciansSongs bean = gson.fromJson(result, MusiciansSongs.class);
            if ("200".equals(bean.getCode())) {
                datas = bean.getData().getList();
                if (bean.getData().getList().size() != 0) {
                    datas = bean.getData().getList();
                    SongsAdapter.page++;
                    LogUtils.e("songs protocol" + datas.toString());
    
                } else {
                    Toast.show("没有更多数据");
                }
    
            } else {
                Toast.show("请稍后重试");
            }
        }
    };
    //调用 
    SongsProtocol.parse(id, callback);
    

    速度非常快,毫无有延迟现象,这样子的难题又被解决了,当然这些代码还可以优雅一点,实现代码的复用。才是砸门追求的。

    很简单是吧,也没有要说声明,相信大家都可以看懂。

    展开全文
  • ajax异步同步设置

    千次阅读 2018-10-26 14:54:48
    ajax同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。... async这个属性默认是true:异步,false:同步。...
  • 单片机异步同步

    千次阅读 2013-07-12 12:31:09
    异步通信(UART)指两个互不同步的设备通过计时机制或其他技术进行数据传输。异步通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。基本上,发送方可以随时传输数据,而接收方必须在...
  • js ajax 异步 同步 区别

    千次阅读 2015-09-17 22:29:45
    ajax 同步异步的区别
  • react hooks usestate 异步同步问题

    千次阅读 2020-08-14 14:35:17
    const [musicData, setMusicData] = useState({ songs:[], isLoading:false }); if(a===1){ ...这个时候最后得到的isLoading值可能是false 也有可能是true 这个判断会让本来同步的队列变的不同步, ...
  • 关于异步同步,长连接短连接,半双工全双工单工概念的整理 同步:如:三次握手,需要请求-响应配对,才进行下一个请求-响应; 异步:如:UDP会话,只管自己做自己的,至于对端是否处理成功,没有关系; 长...
  • golang gin 框架 异步同步 goroutine 并发

    千次阅读 2020-03-27 20:24:57
    goroutine机制可以方便地实现异步处理 package main import ( "log" "time" "github.com/gin-gonic/gin" ) func main() { // 1.创建路由 // 默认使用了2个中间件Logger(), Recovery() r := gin.Default() ...
  • 把服务器上的数据库down到本地,客户端使用时操作本地数据库,固定时间或服务器数据库连通的情况下,将本地数据同步到服务器的数据库中。 目的:在服务器关闭、或断网情况下,可以保证客户端使用的稳定性。 希望...
  • /** * Ajax获取返回值 */ Utils.getData=function(url,params){ var result; // 设置同步 $.ajaxSetup({ async : false }); $.post(url,params,function(data){ //此处获取数据 resul
  • 异步同步在不同的场合有不同的含义,我们经常被这些感念弄混淆。 同步异步一定有双方以上,阻塞非阻塞肯定是线程进程自己的行为。 一、在操作系统中 阻塞状态是指正在执行的进程由于发生某事情而暂时无法继续...
  • 然后我们看下setData()的两个功能过程:setData函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的this.data的值(同步)。再来看setdata调用情景:一般setData()方法多用于点击后改变页面信息或者...
  • dubbo异步同步调用混合使用问题

    千次阅读 2016-05-19 17:46:42
    由于上面的方法导致此时为true(本来的同步调用变成了异步调用) else if (isAsync) { ResponseFuture future = currentClient.request(inv, timeout) ; RpcContext.getContext().setFuture(new FutureAdapter...
  • java ajax实现异步同步请求全面详解

    千次阅读 2017-07-31 17:13:52
    async:true(异步)或 false(同步) send(string) string:仅用于 POST 请求 responseText:获得字符串形式的响应数据 responseXML:获得XML形式的响应数据 status和statusText:以数字和文本形式返回HTTP...
  • 如果手工调用parser解析的话,会出现一些意向不到的问题(可能由于本人是新手,对dojo不太熟悉),同时由于异步加载的原因,无法直接使用dojo直接调用一些类库,但是如果调成同步的话,dojo就可以直接使用了。...
  • 请求的同步 } //get 请求的异步 private void getEnqueue (){ OkHttpClient client = new OkHttpClient () ; // 创建一个 request 对象 Request request = new Request . Builder ...
  • 异步解决方案: 使用 Promise 使用 Promise + async + await 我曾经的常规写法: 存在的问题:代码量一但多起来,就懵逼了 <template> <view class="content"> </view> </template> ...
  • 报文发送和接收是同步进行,既报文发送后等待接收返回报文。 同步方式一般需要考虑超时问题,即报文发上去后不能无限等 待,需要设定超时时间,超过该时间发送方不再等待读返回报 文,直接通知超时返回。 ...
  • 之前翻看别的大佬的...观看了几篇之后还是没有怎么看懂,于是自己开始分析代码,并整理了此文章,我相信通过此文章朋友们能对异步同步还有,setTimeout,Promise,async这些内容了然于胸,接下来让我们走入正题: ...
  • 如图第一个方框内是异步复位和同步释放电路。有两个D触发器构成。第一级D触发器的输入时VCC,第二级触发器输出是可以异步复位,同步释放后的复位信号。 电路目的:方式复位信号撤除时产生亚稳态事件。 所谓异步...
  • 在实际的工程中选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位或者异步复位或者异步复位同步释放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一个...
  • 同步异步

    万次阅读 2020-07-21 20:10:16
    代码 import asyncio import time now = lambda: time.time() # 同步 def work1(): print(f"work1 is called,时间: {now()}") ...print("同步花费的时间是{}\n".format(now() - time1))...# 异步 async def work2():
  • react的同步异步

    2020-09-04 11:02:44
    react的同步异步 同步: 1.自己注册的事件 2.setTimeout ,setTimeInteval 3. ajax 回调里 异步: 1.react本身的事件 2.在生命周期里 setState 同步:执行完 立刻就修改完成 异步:执行完 10ms 修改完成
  • Ajax 异步&同步请求

    万次阅读 2015-05-04 19:11:59
    XMLHttpRequest支持同步异步通信。但是,一般来说,出于性能原因,异步请求应优先于同步请求。同步请求阻止代码的执行,这会导致屏幕上出现“冻结”和无响应的用户体验。 一、简介 Ajax 请求最重要的问题是代码...
  • 异步操作和同步操作

    千次阅读 2019-07-25 12:47:58
    同步异步 同步(如银行转账系统的保存操作需要同步操作) 同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,发送一个请求,需要等待返回,才能发送下一个请求 给用户一种卡死了的感觉...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 534,657
精华内容 213,862
关键字:

异步同步