第1章 响应式编程总览(Reactive Programming)
估计在Java语言诞生的时候,它的开发者怎么也想不到,仅仅20年的时间,人们的需求会出现如此爆炸式的增长,也正是因为Java语言“write once,run anywhere”的特性吸引了众多开发者,成就了巨型社区。随着这些年智能手机的发展和普及,我们的服务器端要应对日益增长的巨大流量。从开发的角度来看,这就要求我们必须设计出高扩展性和高可用性的程序,以确保能够适应日益增长的请求所带来的压力。而从使用者的角度来看,他们并不会关心后台到底是怎样的,而更关注App界面的易用性和是否美观,最重要的是每次操作能否得到快速的响应。
举一个例子,在CPU还是单核的年代,计算机上只运行一个程序就能够将CPU占用得满满当当。如果计算机上同时运行两个程序,用户就会觉得卡顿,此时CPU要通过上下文切换轮流处理这两个程序,而这个切换过程会消耗CPU资源,以及占用更多的内存资源。而在CPU是多核的时代,我们可以同时打开多个程序,还可以随意切换,并且没有丝毫停滞感。
与硬件端的发展相似,现在Web前端已经可以实现单页应用。举一个例子,在使用音乐App的场景下,点开一个歌单,这个获取歌单的过程可能由于多种原因而产生延时;与此同时,可以切换到这个App的评论区,查看评论将丝毫不影响后台正在进行的获取歌单的任务,等切换回来时可以立马展示获取到的歌单。
于是,对开发人员来说,有两种选择摆在面前。第一种是在从数据库中查找歌单任务完成之前,让用户一直等待,而不能进行其他操作;第二种是用户可以在查找歌单任务执行期间同时使用其他功能,而不是切换回来之后重新查找。
对于用户来说,第二种肯定是最佳选择,至此引出了我们的话题:基于异步的开发模式和传统的基于同步的开发模式。后者比较简单,不必多说,因此我们接下来要介绍的就是基于异步的开发模式,即异步编程模式。