异步编程是什么?
想必大家平时都喜欢使用同步代码编写程序,因为这种请求/响应的方式比较简单,并且比较符合编程人员的思维习惯;这种做法很好,直到系统出现性能瓶颈;同步编程方式不能满足我们需求时,通过编写异步、非阻塞的代码,反而可以起到很好的效果,从而提高系统性能。
它也是可以让程序并行运行的一种手段,可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且等工作单元运行结束后通知主应用程序线程它的运行结果或者失败原因。提高应用程序的性能和响应能力。
虽然Java为不同技术域提供了相应的异步编程技术,但是这些异步编程技术被散落到不同技术域的技术文档中,没有一个统一的文档对其进行梳理归纳。另外这些技术之间是什么关系,各自的出现都是为了解决什么问题,我们也很难找到相关资料来解释。但是前些时间在网上看到一份淘宝一位大牛整理出来的文档却打破了这种局面,这份文档涵盖了Java中常见的异步编程场景,理论与实践相结合,感觉很不错,跟大家分享一下,需要的老哥文末有获取方式~
这份文档是从易到难的顺序编写的,并且每章都有一些代码示例供大家动手实践,这份文档共分为9章,内容概述如下:
第1章 认识异步编程
- 异步编程概念与作用
- 异步编程场景
提到异步编程的概念和作用,以及在日常开发中都有哪些异步编程场景。
同步调用与异步调用
第2章 显式使用线程和线程池实现异步编程
- 显式使用线程实现异步编程
- 显式使用线程池实现异步编程
提到最基础的显式使用线程和线程池来实现异步编程的方法,也分析了它们目前存在的缺点。
线程池类图结构
第3章 基于JDK中的Future实现异步编程
- JDK中的Future
- JDK中的FutureTask
- JDK中的CompletableFuture
- JDK8 Stream & CompletableFuture
提到JDK中的各种Future,包括如何使用Future实现异步编程及其内部实现原理,然后讲解了如何结合JDK8.Stream和Future实现异步编程。
FutureTask的类图结构
第4章 Spring框架中的异步执行
- Spring中对TaskExecutor的抽象
- 如何在Spring中使用异步执行
- @Async注解异步执行原理
提到Spring框架中提供的异步执行能力,包括在Spring中如何对TaskExecutor进行抽象,如何使用注解@Async实现异步编程,以及其内部实现原理。
异步执行
第5章 基于反应式编程实现异步编程
- 反应式编程概述
- Reactive Streams规范
- 基于RxJava实现异步编程
- 基于Reactor实现异步编程
讲解比较热门的反应式编程相关的内容,包括什么是反应式编程,如何使用反应式编程规范的库RxJava和Reactor实现异步编程。
异步切换
第6章 Web Servlet的异步非阻塞处理
- Servlet概述
- Servlet 3.0提供的异步处理能力
- Servlet 3.1提供的非阻塞|O能力
- Spring Web MVC的异步处理能力
讲解WebServlet的异步非阻塞处理,包括Servlet3.0规范是如何提供异步处理能力的,Servlet3.1规范是如何解决IO阻塞问题的,以及如何在SpringMVC进行异步处理。
Servlet异步处理模型
第7章 Spring WebFlux的异步非阻塞处理
- Spring WebFlux概述
- Reactive编程& Reactor库
- WebFlux服务器
- WebFlux的并发模型
- WebFlux对性能的影响
- WebFlux的编程模型
- WebFlux原理浅尝
- WebFlux的适用场景
讲解与Servlet技术栈并行存在的、由Spring5.0提 出的SpringWebFlux异步非阻塞处理,包括Spring WebFlux的由来、Spring WebFlux的并发模型、两种编程模型,以及如何使用Spring WebFlux来进行服务开发、Spring WebFlux内部的实现原理。
WebFlux与Servlet对比
第8章 高性能异步编程框架和中间件
- 异步、基于事件驱动的网络编程框架- Netty
- 高性能RPC框架一Apache Dubbo
- 高性能线程间消息传递库一Disruptor
- 异步、分布式、基于消息驱动的框架- Akka
- 高性能分布式消息框架Apache RocketMQ
简要介绍了业界为方便实现异步编程而设计的一些框架和中间件,比如异步基于事件驱动的网络编程框架Netty,高性能RPC框架Apache Dubbo,高性能线程间消息传递库Disruptor,异步、分布式、基于事件驱动的编程框架Akka和高性能分布式消息框架ApacheRocketMQ。
RocketMQ部署架构
第9章 Go语言的异步编程能力
- Go语言概述
- Go语言的线程模型
- goroutine与channel
介绍新兴的Go语言是如何从语言层面提供强大的异步编程能力的。
一对一线程模型
写在最后
异步编程是高性能程序的利器,同时也是程序员面临的挑战之一。要想写出优秀的异步编程代码,既需要对异步编程的原理有深刻理解,也需要对各种异步编程框架有全面掌握。这份文档就涵盖了异步编程的方方面面,既对原理和框架进行了深入阐述,又对实战代码进行了展示,是全面和系统掌握异步编程的不二之选。还是Java程序员进阶的必学文档。
需要这份异步编程实战文档的老哥,帮忙点赞转发加关注小编支持一下,然后添加小助理vx:bjmsb2020 即可得到获取方式了~