• 同步和异步


    什么是同步?

    我对同步一直有个误区,以为等待的就是同步,比如http请求。事件发生只能一件一件来,一件结束才能开始下一件。通常下一件事物都处于等待状态,因为他依赖前一件事的结果,比如排队。前面的人没有把事情办好,后一个人就不能办事。对于严重以来前一件事情结果的,或者两件事情资源不能交叉的,那么设计为同步较好。

    什么是异步?

    就是两个work可以同时进行,你进行你的,我处理我的,可以互不干扰的同时运行。比如寄快递,我们去邮局寄快递后,无需等待快递寄到目的地才能回去,而是在邮局填好单子,付好钱,然后就回家了。接下来可以做其他事情了。两天后你的快递到达朋友手中,他微信你:“你的快递我收到了”。这就是典型的异步过程。但是去银行存钱,我们不会把钱放在柜台,填好单子,然后就回家了把。而是等到柜员把钱数好,存好后。告诉你钱已经到账了。然后回家。

    所以?异步一定比同步快吗?

    很长一段时间,我是这么认为的。项目优化的时候无脑把同步改成异步,以为服务的吞吐就能提升了。那么为什么银行存款业务不做异步处理呢?我们只是把钱放在柜台,然后回家等银行通知?除了安全性,其实存钱是很人力的操作。其中的数钱、确认金额、确认到账等步骤都是人力密集型的,也就是我们说的CPU密集型,你在不在银行柜台,他都得耗费这么多人力,节约不了时间。而快递采取异步处理,是因为整个过程耗费在人力上的时间很短,更多的是耗费在路上,即把物品从城市A派送到城市B,也就是我们说的IO密集型。

    也就是说如果是IO密集型,那么等待时间会较长,等待时CPU会闲置,如果采用异步,CPU可以处理更多任务,可以加大整个系统的吞吐。如果是CPU密集型,过分的强调同步,反而会导致CPU频繁切换,导致吞吐下降。当然这个得根据实际情况而定。这就是我理解的同步和异步。

  • 相关阅读:
    查找oracle数据文件、表空间的位置
    select into 给多变量赋值
    关于Union 中 ORA-12704:字符集不匹配问题的解决
    weblogic线程阻塞性能调优(图解)
    window系统无法访问局域网内文件共享的问题
    查看oracle的sql语句历史记录和锁表的情况
    <c:forEach>标签的使用 JSTL
    CAS服务下单点登录(服务端与客户端)
    cas 配置数据源 , 解决CAS 不支持你提供的凭证 .
    信号量通俗释义
  • 原文地址:https://www.cnblogs.com/howo/p/11938257.html
Copyright © 2020-2023  润新知