响应式编程, Reactive Programming, 反应式编程
Contents
响应式编程, Reactive Programming, 反应式编程
Reactive Programming 作为观察者模式 (Observer) 的延伸,不同于传统的命令编程方式 ( Imperative programming) 同步拉取数据的方式,如迭代器模式 (Iterator)。而是采用数据发布者同步或异步地推送到数据流 (Data Streams)的方案。当该数据流 (Data Steams)订阅者监听到传播变化时,立即作出响应动作。在实现层面上,Reactive Programming 可结合函数式编程简化面向对象语言语法的臃肿性,屏蔽并发实现的复杂细节,提供数据流的有序操作,从而达到提升代码的可读性,以及减少 Bug 出现的目的。同时,Reactive Programming 结合背压 (Backpressure) 的技术解决发布端生成数据的速率高于订阅端消费的问题。
https://developer.aliyun.com/article/617709
响应式编程为 Java 的企业版应用提供了更高的性能,并降低了内存消耗,主要是通过减少进程的上下文切换来实现的。因为类似的上下文切换对 CPU 和内存的消耗是极大,所以要尽可能的减少这样的切换操作。不过,响应式编程带来的这种性能上的提高,代价是降低了软件的维护性
java 使用一对一的线程模型,一个java线程对应一个内核线程, 高并发情况下 线程上下文切换成为了瓶颈.
而这正是响应式编程的用武之地,它与目前的 Java 线程模型完全相反。目前的线程模型是保证所有的事情都在当前线程执行,但是在响应式编程中,异步是一个准则。一个程序执行过程被认定为一系列异步执行的事件,每个事件都被 Publisher 创建,你不需要关心 Publisher 在哪个线程中创建。在响应式程序里面,程序代码包含了监听和执行异步事件的功能,而且会在必要时提供新的事件。 这个方式在某些场景下很有效果,比如说在程序里面访问外部数据库。传统的企业级 Java 程序里面,系统会发送一段 SQL 语句到数据库上面,阻塞住程序,直到数据库返回查询结果。但是在响应式编程里面,程序会跳过等待结果的过程,正常向下执行代码。当你发送一个 SQL 请求到数据库的时候,会用一个 Pushlisher 来替代阻塞的过程,调用者可以注册这个 Pushlisher,这样的话,在之后数据库返回结果的时候,就会通知 Publisher,然后 Publisher 会通知调用者。
响应式编程的好处就是执行的代码和执行的线程是分开的。因此在操作系统的层面上,上下文切换的代价比较低。
响应式编程也有一些比较严重的问题,写入的代码和执行的代码分离开来,导致阅读和编写代码的难度增加,对于这种异步的代码,编写单元测试和调试代码都很困难。
类似于 C Sharp、JavaScript、Kotlin 等这一类的编程语言在这个领域已经走在了前面,他们在编程语言中集成了这部分功能,可以帮助你执行一小段异步代码,并在返回的时候阻塞,直到执行结束。在 C Sharp 和 JavaScript 中,可以使用 Async 和 Await 关键字,在 Go 和 Kotlin 中,同样包括了协程的概念来提供类似的功能。
Hystrix 底层依赖是 RxJava, RxJava 是 Reactive 在 Java 编程语言的扩展框架。
Reactive Extension (RX)
wangyue.dev/rxjava
性能之争:响应式编程真的有效吗? 原文链接: https://www.infoq.cn/article/xYCWYK9*TfmpFNO6RkWt?utm_source=rss&utm_medium=article
https://www.infoq.cn/article/xYCWYK9*TfmpFNO6RkWt?utm_source=rss&utm_medium=article
https://www.jianshu.com/p/035db36c5918
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
Reative Streams 规范
https://github.com/yelf2000/rxjava/wiki/Reative-Streams-%E8%A7%84%E8%8C%83
Reactive Programming 一种技术,各自表述
Reactive Streams
https://github.com/reactive-streams/reactive-streams-jvm?spm=a2c6h.12873639.0.0.697d60feLX6HjG
The Reactive Manifesto
https://www.reactivemanifesto.org/?spm=a2c6h.12873639.0.0.697d60feLX6HjG
The introduction to Reactive Programming you’ve been missing
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754?spm=a2c6h.12873639.0.0.697d60feLX6HjG
Author -
LastMod 2019-05-10