34°

什么是反应式编程?什么是响应式编程?

反应式编程又叫响应式编程,在维基百科中,其属于声明式编程,数据流。所以二者可以说是同一种东西。 它是一种基于数据流 (data stream) 和 变化传递 (propagation of change) 的声明式 (declarative) 的编程范式。

使用异步数据流进行编程,这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

java中最早出来的就是RxJAVA(全称:Reactive Extensions java)。

A library for composing asynchronous and event-based programs using observable sequences for the Java VM
一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。
It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.
它扩展了观察者模式以支持数据/事件序列,并添加了运算符,使您可以声明性地将序列组合在一起,同时消除了对低级线程,同步,线程安全和并发数据结构等问题的担忧。

可以说RxJava是扩展的观察者模式(官方说的)

观察者模式的四大要素:(观察者模式本质上是通过订阅将被观察者产生的事件传递给观察者)

Observable 被观察者

Observer 观察者

subscribe 订阅

事件

被扩展的观察者模式:

RxJava中相对于观察者模式多了onCompleted()和onError()两个方法,这两个互斥的方法能唯一确定事件的结束。

上面介绍了RxJava,我在说说vert.x是什么?

vert.x是一个基于JVM、轻量级、高性能的应用平台,非常适用于移动端后台、互联网、企业应用架构;基于Netty全异步通信,并扩展出了很多有用的特性;是基于事件总线设计的高性能架构,保证应用中不同部分以一种非堵塞的线程安全方式通讯;是借鉴Erlang和Akka架构设计,能充分利用多核处理器性能并实现高并发编程需求的框架。也就是可以理解为在有限的环境中讲系统性能发挥到极致

vert.x的特点:

1.支持多种编程语言

2.异步无锁编程

3.对各种IO的丰富支持(TCP/UDP等)

4.分布式消息传输:EventBus事件总线,EventBus也是Vert.x架构的灵魂所在

5.模块化

6.支持WebSocket

7.良好的扩展性

8.高并发性

想了解更多请查看一下地址:

官方文档:https://vertx.io/docs/

CSDN:https://blog.csdn.net/lizhou828/article/details/93297153

gitChat:https://gitbook.cn/books/5c7f3009db8240765465a1f1/index.html

反应式宣言:https://www.reactivemanifesto.org/zh-CN 有兴趣的可以点击进去看看。

主要说了反应式系统的特质:

1.即时响应性

2.回弹性

3.弹性

4.消息驱动(反应式系统依赖异步的消息传递)

spring5的webFlux和vert.x有什么区别呢?

(以下内容都是自己的总结、查看官方文档等方式,都是基于理论基础之上暂时并没有实践过,若有不对的地方请大佬指点一二,谢谢!希望有实际使用经验的大佬来补充一下!)

来自springWebFlux官方文档:

1.1.6. Performance

The key expected benefit of reactive and non-blocking is the ability to scale with a small, fixed number of threads and less memory. That makes applications more resilient under load, because they scale in a more predictable way. In order to observe those benefits, however, you need to have some latency (including a mix of slow and unpredictable network I/O). That is where the reactive stack begins to show its strengths, and the differences can be dramatic.

第一句为重点:能够以较少的固定数量的线程和较少的内存进行扩展。这使应用程序在负载下更具弹性,因为它们以更可预测的方式扩展

这点可以说是他们的共性吧。

在我看来优缺点也各有千秋:

vert.x 简单便捷,但是spring社区很活跃并且有很多现成的东西

希望有大佬能够在评论区进行补充

本文由【BIG_BRA】发布于开源中国,原文链接:https://my.oschina.net/Pirvate/blog/3160367

全部评论: 0

    我有话说: