响应式编程简介

其实响应式编程已经有几年了,但是目前看起来国内用的并不太多,这个系列也是很久之前就计划写了却一致没有开始,今天终于开始了,希望能让看到的人也有所收获。

也有人叫反应式编程,两种叫法吧,毕竟是翻译,我这里就都叫响应式编程了。

我这边主要会以Reactor3(https://projectreactor.io/docs)作为响应式编程的使用示例。

Reactor3是基于Reactive Streams的一个库,并把响应式编程引入到jvm

为什么要用响应式编程?

反应式编程是一种新的开发方式,我们使用声明式代码(类似于函数式编程的方式)来构建异步处理管道。它是一个基于事件(事件驱动,event-driven)的模型,当数据可用时,数据被推送到消费者:我们处理异步事件序列。

特点有几个关键词:异步、事件驱动、推送Push、观察者模式的衍生。

为了更有效地利用资源并提高应用程序为大量clients服务的能力,而不必编写低级并发或并行代码,所以我们需要响应式编程来帮我们更容易的实现我们的需求。

其实如果我们把一部分工作用线程池处理,通过某种方式让线程异步处理完之后通知主线程并把任务连贯起来,这种方式我们自己开发也就和响应式编程的原理差不多,通过响应式编程API,我们的开发会更简单(已经帮我们实现好了一些工作),逻辑也会更清晰。

这里举个例子,比如我们的一个功能需要进行耗时的IO操作(可以是网络IO请求、可以是数据库查询等),我们通过异步的方式释放当前线程,可以更高性能的使用我们的服务器资源,但是实际上我们的这个功能的整体耗时并没有减少,这点需要注意。

Reactive Streams

响应式编程主要围绕完全的异步(asynchronous)和非阻塞(non-blocking),其实是可以替代jdk里面功能有限的基于Future的callback的。

Reactive Streams规范其实是行业驱动的,旨在标准化jvm上的响应式编程,并指定的他们应该如何工作,其实对应的实现方案有很多,比如Reactor3、RxJava、Akka Streams、Vert.x、Ratpack。

Reactor 3旨在提供一个更高级别的API,它可以在更广泛的情况下发挥作用。

工作流程

在响应式编程中,Publisher生产数据,但是默认的不会发生任何事,直到Subscriber订阅了,这时候生产者就会推送数据到消费者了。

©原创文章,转载请注明来源: 赵伊凡's Blog
©本文链接地址: 响应式编程简介

发表评论

电子邮件地址不会被公开。 必填项已用*标注