专栏首页Java学习网Java开发中同步异步、阻塞非阻塞知识总结

Java开发中同步异步、阻塞非阻塞知识总结

同步/异步(描述网络通信模式,适用于请求-响应模型)

  • 同步:发送方发送请求后,需要等待接收响应,结果占用并浪费了CPU资源
  • 异步:发送方发送请求后,不需要响应,可以继续发送下一个请求,或者主动挂起线程并释放CPU资源

阻塞/非阻塞(描述进程的函数方法调用方式)

  • 阻塞:IO 调用会一直阻塞,直至调用结果返回后,才能继续执行
  • 非阻塞:IO 调用可以立即返回,并执行下一个 IO 调用

总结,同步异步和阻塞非阻塞是两个不同的概念,用最简单的数据库查询来举一个例子:

  1. 如果发送一个请求,需要等待数据库响应,结果占用并浪费了CPU资源,这就是同步
  2. 如果发送一个请求,不需要数据库响应,可以继续处理另一个请求(NIO模式、回调通知模式),或者将任务插入一个队列中,主动挂起自身线程并释放CPU资源(异步队列模式),这就是异步
  3. 在第2点中,如果采用异步队列模式,会造成线程阻塞,直至获得数据库数据后,才能继续执行,这就是阻塞
  4. 在第2点中,如果采用NIO模式、回调通知模式,则意味着数据库IO调用可以立即返回,这就是非阻塞

一般来说,同步是最简单的编程方式,而异步编程虽然需要一定的技术和工作量,但是却能提升系统性能。对于阻塞与非阻塞,阻塞方式的实时响应性更好,但是挂起与唤醒线程的性能损耗更高,而非阻塞方式的性能、吞吐量更高,但是由于其是顺序执行每一个事件,一旦处理某一个事件过久,会直接影响后续事件的处理,因此实时响应性比较差。

本文分享自微信公众号 - Java学习网(javalearns)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python代码注释的一些基础知识

    在编写Python代码时,确保您的代码易于被其他人理解是很重要的。给变量、函数起合适的名字以及合理地组织代码都是很好的方法。

    一墨编程学习
  • JVM系列第2讲:Java 虚拟机的历史

    说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待。但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic V...

    陈树义
  • 一天一个设计模式:模板方法模式

      模板方法模式是类的行为模式,准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不...

    用户1134788
  • 【精编重制版】JavaWeb 入门级项目实战 -- 文章发布系统 (第一节)

    本教程是,原文章发布系统教程的精编重置版,会包含每一节的源码,以及修正之前的一些错误。因为之前的教程只做到了评论模块,很多地方还不完美,因此重制版会修复之前的一...

    剽悍一小兔
  • 2018-11-08 杀死If Else switch case(策略模式+工厂模式+map)套餐 Kill 项目中的switch case

    为了便于理解,举个没有业务逻辑的例子,基于这个例子上进行优化。 现在是12:47,举个饭后吃水果的例子哈哈哈(逃 假设我们可以选择的水果有香蕉、西瓜和苹果。吃香...

    Albert陈凯
  • Linux下的JDK和OpenJDK有什么具体的区别

    黑泽君
  • Java 程序员必备的 15 个框架,前 3 个地位无可动摇!

    Java 程序员方向太多,且不说移动开发、大数据、区块链、人工智能这些,大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web ...

    Java技术栈
  • hadoop2-HBase的Java API操作

    Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase。

    Hongten
  • 马化腾在小程序首次获选世界互联网领先科技成果奖发表演讲

    昨日小程序斩获一项世界级殊荣——在乌镇举行的第五届世界互联网大会“世界互联网领先科技成果发布活动”上,作为一项全新的技术和应用创新,小程序首次获选世界互联网领先...

    ytkah
  • jvm堆内存溢出后,其他线程是否可继续工作

    最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域...

    纯洁的微笑

扫码关注云+社区

领取腾讯云代金券