您的位置:首页 > 编程语言

异步编程之美

2019-12-31 07:10 1261 查看

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

         在大学毕业后的工作期间,从最开始的编写同步代码,到慢慢为了提高系统性能,把一些任务使用异步的方式来处理,从而提高系统的响应时间,那么就会产生一些新的问题,如何监控在异步线程执行的任务的执行状态,是否出现了错误,出现了错误怎么处理,系统创建大量线程又该如何统一管理,这些种种问题都让使我意识到深入了解异步编程的必要性。

        同步的代码, 在很多情况下, CPU其实是在等待中度过的, 比如等待一个网络连接, 等待MySQL服务器的数据返回异步的代码, 就是把这些等待的时间给充分利用起来了, 把网络连接, 访问数据库这种耗时的工作时都在注册一个callback或者event之后切换出来,让CPU先去干别的活(例如响应别的请求), 当网络连接,数据库返回结果时再回来执行刚才的callback中的代码,异步的代码可以大大的提升系统的容量上限, 因为充分利用了空闲的CPU时间, 但是对于单个的请求的性能提升帮助比较有限 (除非你的单个请求大量依赖这种IO操作)。

        Java的异步编程其实是一个充分利用计算机CPU资源,不想让主程序阻塞在某个长时间运行的任务上,这类耗时的任务可以是IO操作、远程调用以及高密度计算任务。如果不使用多线程异步编程,我们的系统就会阻塞在耗时的子任务上,会导致极大延长完成主函数任务的时间。Java以及提供了丰富的API,来完成多线程异步编程。从NIO、Future,CompletableFuture、Fork/Join以及parrallelStream。另外google的guava框架提供了ListenableFuture和Spring的@Async来简化异步编程。

       在我来到现在这家公司的时候,老大就安排我一个任务,要我对线程池进行监控,如果线程执行失败,需要记录下来,并发送送通知,其实那时候我对异步编程的理解仅仅是new Thread()的阶段,对于线程池的概念都还很模糊,好几次面试的时候面试官问我,创建线程池有多少中方式,说说线程的特性,那时候我都是一脸懵逼的,话说回来,为了解决老大交给的这个任务,我开始阅读一些资料来对加强对异步编程的理解,一步一步调试查看ThreadPoolExecutor的源码,不断尝试在哪些环节可以加入监控,最终自己实现了一个可监控的ThreadPoolExecotor,让线程执行不再不可知,也不用再手动的去恢复线程执行失败的数据,那时候线程执行失败完全不知道,全靠线上日志一点一点排查,真的是心塞,从这个事情之后,对于异步编程的也有了一些初步的了解,也醉心于其中的研究。于是在空闲之余又研究了ForkJoin框架,对于这个新东西,使用起来真的是大大的提高效率,同样的自己实现了一个可监控的ForkJoin,对递归处理的第一个错误进行捕获,并且暴露函数式接口,来针对执行失败的回滚处理。在整个对异步编程的学习过程中,收获了许多,也希望可以阅读更多的资料来增强实战能力,这时候一本实战的异步编程的书籍就显得尤其重要了。

        异步编程是高性能程序的利器,同时也是程序员面临的挑战之一,要想写出优秀的异步编程代码,既需要对异步编程的原理有深刻的理解,也需要对各种异步编程框架有全面的掌握。之前有幸读过加多老师编写的Java并发编程之美,其通俗易懂的讲解方式帮助我完成多线程并发编程从入门到实践的飞跃!而且通过许多案例来加深对并发编程的理解,实乃居家旅行的必备书籍。现在加多老师又出了《Java异步编程实战》这本书,深入剖析了Java、go语言编程,现在对于异步编程的书籍并不多,相信通过阅读此书,可以让你对异步编程的理解更上一层楼。

        《Java异步编程实战》针对各种常见异步编程场景,从编程语言、开发框架等角度深入讲解了异步编程的原理和方法。作者是淘宝的资深Java技术工程师,在Java异步编程、并发编程领域有深厚的积累。整本书由浅入深,首先介绍了异步编程的概念、适用场景,以及如何使用线程和线程池来实现异步编程;再讲解JDK中的各种Future及其内部实现原理,然后讲解如何使用Future实现异步编程,以及如何结合JDK8 Stream 和Future实现异步编程;以及对Spring框架中提供的异步执行能力进行详细分析,包含Spring中如何对TaskExecutor进行抽象,如何使用注解@Async实现异步编程,以及其内部实现原理;最后讲解了最近比较热门的反应式编程相关的内容,包含什么是反应式编程,如何使用反应式编程规范的库RxJava和Reactor库实现异步编程,看到这里赶紧点击下面的链接买起来吧。

当当购买链接:http://product.dangdang.com/28499408.html<br/>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RxJava Reactor Java Guava JDK