zoukankan      html  css  js  c++  java
  • Android之同步与异步

    在Android的API当中handler消息处理、Broadcast广播消息等均采用异步通信机制。什么是异步通信机制呢?和它相对的同步通信机制又是什么呢?有什么区别呢?

    Synchronous(同步)和Asynchronous(异步)的概念最早来自通信领域。

    通信的同步:指客户端在发送请求后,必须要在服务端有回应后客户端才继续发送其他请求,所以这时所有请求将会在服务端得到同步,直到服务端返回请求。

    通信的异步:指客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求,对所有的请求动作来说将会在服务端得到异步,这条请求的链路就像是一个请求队列,所有的请求动作在这里不会得到同步。

    在软件世界中,我们常说的“同步和异步”,更多是指函数、方法调用的“同步和异步”,也就是“同步调用和异步调用”。

    所谓同步调用,在发起一个函数或方法调用时,没有得到结果之前,该调用就不返回,直到返回结果;异步调用的概念和同步相对,在一个异步调用发起后,被调用者立即返回给调用者,但调用者不能立刻得到结果,被调用者在实际处理这个调用的请求完成后,通过状态、通知或回调等方式来通知调用者请求处理的结果。

    注意 现在清楚同步和异步吗?简单地说,同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。

    单从任务调用来讲,对于同一个任务,异步调用并不能加快这个任务的执行速度和效率,相反会降低执行速度和效率。站在整个系统的层面上考虑,异步调用使得整个系统的性能效率提高,各个组件之间运行配合更加协调。这才是异步调用的真正优点。

    所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回。所以异步的同义语是非阻塞(None Blocking)。

    网上有很多网友用很通俗的比喻 把同步和异步讲解的很透彻 转过来

    举个例子:普通B/S模式(同步)AJAX技术(异步)

                同步:提交请求->等待服务器处理->处理完毕返回   这个期间客户端浏览器不能干任何事
    
                异步:   请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
    

    同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
    异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

    所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

    以通讯为例
    同步:发送一个请求,等待返回,然后再发送下一个请求

                异步:发送一个请求,不等待返回,随时可以再发送下一个请求
    
                并发:同时发送多个请求
  • 相关阅读:
    Linux 安装 jdk 后 jps 出现问题/usr/jdk1.8.0_151/bin/jps: /lib/ld-linux.so.2: bad ELF interpreter: No such
    Jackson 注解
    Git 右键添加Git Bash
    No validator could be found for constraint
    rror querying database. Cause: java.sql.SQLException: null, message from server: "Host '192.168.30.1' is not allowed to connect to this MySQL server"
    Linux 安装 Mysql-5.7.23-linux-glibc2
    Promise
    PAT(B) 1094 谷歌的招聘(Java)
    PAT(B) 1074 宇宙无敌加法器(Java)
    PAT(B) 1078 字符串压缩与解压(Java)
  • 原文地址:https://www.cnblogs.com/jiani/p/11710230.html
Copyright © 2011-2022 走看看