作为一门诞生了20多年的编程语言,JAVA以出色的功能特性在企业应用中占据核心地位,广泛应用与后端开发、手机应用开发、大数据等众多领域,虽然在起初的架构设计上存在各种各样的缺陷以及受到后来者的疯狂挑战,然而,经过每一次次的版本迭代、功能优化、新特性引入,使得Java在实际的企业业务场景中仍处于较高的地位。尤其是Java异步编程技术的发展,可谓推动了Java技术的革命性进步。
做过Java开发的小伙伴们都知道,Java语言编程其方法开始执行直至其结束,均是由同一个线程去处理完成的。此种模式虽然便于我们开发调试,但会因种种原因导致线程挂起,比如:锁、IO 等资源,从而会产生线程上下文切换,耗费较多资源。毕竟,作为操作系统里面的一个调度单元,线程是一个很宝贵的资源,无限制的增加线程通常情况下是不可取的,况且基本上也是不可能实现的的,因为资源是有限的。因此,我们应该能够让我们应用占用较少的线程资源实现更高、更优的并发处理能力,这才是我们所追求的,为此,我们在实际的项目中需引入新的技术 ,即“Java 异步编程技术”
在实际的项目中,异步编程技术是不可缺少的技能,异步编程可分为以下两种:Java虚拟机内部的异步编程和Java虚拟机之间的异步编程。从本质上来说,异步编程是一种编程方式,可以提高对UI的快速响应。 异步编程提供了一个非阻塞的,事件驱动的编程模型。Java中的异步编程模型提供了一致性的编程模型, 可以用来在程序中支持异步。
其实,从系统架构层面来讲,异步编程技术实现目的,并非是提高并发能力,而是重点在于提高其“伸缩性 (Scalability)”。当前所流行的微服务架构, 无论是基于Apache Dubbo还是Spring Cloud体系,支撑成千上万的应用场景应该没有太大问题,如何使得并发请求业务量在突飞猛进的场景中提供高效、稳定的服务才是关键所在。举个现实中的场景:某商户应用系统,其中一个核心应用在正常的情况下能够对外稳定提供服务其处理能力为800,在某一次的大型促销活动中,这个应用的 TPS 在某一时间段内瞬间增加到10000,这种场景情况下,该如何处理呢?当然还有一种场景,TPS未发生变化,由于高流量的导入使得此核心应用所依赖的服务发生故障,或TimeOut Exception。当这些现象出现时,应用系统还能够持续稳定提供服务吗?当然,我们可以借助熔断、限流等技术来规避、解决这种场景下服务的可用性问题,但这毕竟是一种舍车保帅的做法。是否在流量突增场景下仍能够持续保证服务质量呢?那就是借助异步编程 + NIO去实现。NIO 技术本身现在已经很成熟了,关键是用一种什么样的异步编程技术将 NIO 快速、高效地落地到应用系统当中。
Java异步编程从前期的Future技术到现在的Project Loom,可谓“一路艰辛”,中间历经:Callback、Servlet3.0、反应式编程、Kotlin 协程。与之前所提及的Java异步编程方案相对比,Project Loom 是从 JVM 层面对多线程技术进行彻底的改变。长期以来,Java 的线程是与操作系统的线程一一对应的,这限制了 Java 平台并发能力的提升。各种框架或其它 JVM 编程语言的解决方案,都在使用场景上有限制。例如 Kotlin 协程必须基于各种 Callback 技术,而 Callback 技术有存在编写、调试困难的问题。为了使 Java 并发能力在更大范围上得到提升,从底层进行改进便是必然。当然,在每一特定阶段每一种技术都有各自的优势与缺陷,在实际的项目中应合理选取。
异步编程对于设计大规模、快速响应的应用架构是至关重要的。借助异步回调方法来执行昂贵的I/O操作从而、而使得处理器可以执行其它任务。当前所流行的语言中,Node与Go几乎天生支持异步编程模式,Java虽然提供了异步的支持,但是异步编程并不总是那么容易实现,不过,不要紧,最新出版的国内首本异步编程著作《Java异步编程实战》将会为您揭晓其中的奥秘!
购买链接:https://item.jd.com/12778422.html