`
daojin
  • 浏览: 700545 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ReactiveX是什么为什么

 
阅读更多
ReactiveX是什么

是一个库,用于“使用一个可观测的序列组成异步和基于事件的程序”

解读:
用在异步和基于事件的程序中。例如网络,输入输出,用一个可观测的序列对这种程序进行组织。


扩展了观察者模式,来支持数据序列或者事件序列,并且添加操作符来把序列组合起来,而不用关心底层的线程化,同步,线程安全,并发数据结构,以及非阻塞IO。

解读:
扩展了观察者模式,支持数据序列(文件或者网络数据)和事件序列(Event),并且用陈述的方式把序列组织起来,
不用关心线程化,同步,线程安全,并发数据结构以及非阻塞IO


可观察对象填补了鸿沟,通过一个理想的方式去获取异步序列。

synchronous:
T getData()
Iterable<T> getData()
asynchronous:
Future<T> getData()
Observable<T> getData()

解读:
对比可以看出来。Observable对应的同步对象是Iterable,是一个迭代模式。
ReactiveX 操作在时间序列上的离散值。

核心概念: 操作在离散序列上的。

2. 为什么使用Observables?



a)  可组合的:
Java Future这种技术是一个比较直接的技术,来执行单个级别的异步执行,但是他们开始增加不可忽略的复杂度,当它们嵌套在一起的时候。很难用Future 组合基于条件的异步执行流。
ReactiveX Observables, 与之不同,就是为了组合异步数据的流或者序列。

b) 灵活的。

ReactiveX Observables 不仅支持发送单个scaler数据,而且可以发射一系列数据,或者数据流。Observable是一个抽象,可以用于这两种任意一个场景。一个Observable与Iterable是同样优美和灵活。

c)Observables Are Less Opinionated. Observable 不是偏见的。

  ReactiveX并不偏向某些特定的并发或异步源。 可以使用线程池,事件循环,非阻塞I / O,参与者(例如来自Akka的参与者)或任何适合您的需求,风格或专业知识的实现来实现可观察对象。 客户端代码将其与Observables的所有交互都视为异步,无论您的基础实现是阻塞的还是非阻塞的,但是您选择实现它。

这个Observable如何实现?
public Observable <data> getData();
从观察者的角度来看,没关系!
它在与调用方相同的线程上同步工作吗?
它在不同的线程上异步工作吗?
是否将其工作划分为多个线程,这些线程可能以任何顺序将数据返回给调用方?
它使用一个Actor(或多个Actor)代替线程池吗?
它是否使用带有事件循环的NIO进行异步网络访问?
它是否使用事件循环将工作线程与回调线程分开?
重要的是:使用ReactiveX,您以后可以改变主意,并从根本上改变Observable实现的基础性质,而又不会破坏Observable的使用者

d) Callbacks 有其自身的问题
回调通过不允许任何内容阻塞来解决Future.get()上过早阻塞的问题。 它们自然有效,因为它们在响应准备就绪时执行。
但是,与Futures一样,尽管回调易于在单个级别的异步执行中使用,但通过嵌套组合,它们变得笨拙。
(Callback 地狱)

e) ReactiveX是多语言实现

目前,ReactiveX已以多种语言实现,并遵循了这些语言的习惯用法,并且正在迅速添加更多种语言。
分享到:
评论

相关推荐

    Rxjava1.1.9 jar和sources源码

    首先,让我们深入理解什么是可观测序列。在 RxJava 中,数据通过一个被称为“流”或“序列”的概念来传递。这些序列可以是同步的也可以是异步的,并且可以包含任何类型的数据。序列可以通过一系列操作符进行变换、...

    RxAdmin-源码.rar

    首先,我们需要了解什么是ReactiveX。ReactiveX是一种编程模型,它将异步数据流的概念引入到面向对象编程中。在RxAdmin中,开发者可以使用Observables(观察者)来处理事件和数据,这使得代码更易于理解和维护。...

    PyReactive:适用于Python 3的React式编程模块

    pyReact性适用于Python 2/3的... 无论将a和b更改为什么, sum始终将保持13,因为在声明时'sum'的求值为13,因此它将保持13。 但是,如果我们要求和根据a和b的值而改变怎么办? 或者,更正式地说,如果我们想求和以订

    gradle-rxjava-project-plugin-1.12.10.zip

    首先,让我们理解什么是ReactiveX(简称RxJava)。ReactiveX是一种编程范式,它将观察者模式、发布/订阅模式和函数式编程融合在一起,用于处理异步数据流。通过使用RxJava,开发者可以以声明式的方式编写代码,使得...

    RxCrystal:Crystal的React性扩展

    **什么是反应式编程?** 反应式编程是一种编程范式,强调数据流和依赖关系的传播。它通过观察数据的变化来驱动程序的行为,而不是通过显式的调用来触发。这种编程方式在处理异步事件、实时系统和复杂数据流时特别...

    KotlinMvp:KotlinMvp 一键生成mvp

    KotlinMvp用于快速生成kotlin的mvp模块为什么要使用该插件?方便!方便!方便!一键生成封装好的 Activity(Fragment ) + Contract + PresenterFragment已做懒加载,网络请求简单到爆炸使用前:该插件的网络库是...

    java6.0源码-NoRxJava:关于Rxjava的一切:像Rxjava库创建者一样思考,为什么我们需要使用RxJava

    像Rxjava库创建者一样思考,为什么我们需要使用RxJava...我会告诉你关于Rxjava的一切:RxJava学习资源(第1部分)、Rxjava用法(第2部分)和Rxjava源代码的解释(第3部分)... 在哪里可以找到 RxJava: RxJava1.x: ...

    Reactive Programming with Swift

    在结束对RxSwift-ReactiveProgrammingwithSwift文档知识点的解读之前,我们也应该注意到文档中提到了几位作者的个人奉献和专业经历,这有助于我们理解他们为什么要编写这本书。他们中有的是自iOS诞生起就从事iOS开发...

    ngx-componentdestroyed:取消订阅Angular Components中的Observables

    为什么? 取消订阅可观察对象将导致可观的流泄漏,因为可观察流将保持打开状态,甚至可能在组件已被破坏或用户导航到另一个页面之后也是如此。 重要提示:如果在中使用服务,则它们会受到同一内存泄漏问题的影响!...

    Reactive programming with java9

    在探讨Java 9的反应式编程之前,首先要了解什么是反应式编程。反应式编程是一种编程范式,它关注于使用数据流和变化的传播来构建应用程序。在反应式系统中,异步数据序列被看作是第一类值,允许开发者使用声明式的...

    泊学付费网站Swift资料(下)

    此文件将详细解释这个版本中的新特性、为什么要进行这些改变,以及它们如何提升代码的可读性和稳定性。 4. **Swift中的异常和错误处理(10)** Swift采取了一种不同于Objective-C的错误处理机制,它使用do-catch...

    RxSwift:Swift中的React式编程-开源

    Rx是通过Observable表示的通用计算抽象介面,可让您广播和订阅Observable流中的值和其他事件。 RxSwift是Reactive Extensions标准的特定于Swift的实现。... 这就是为什么Rx如此简单,优雅和强大的原因。

    Android响应式编程RxJava2完全解析

    RxJava可以浓缩为异步两个字,其核心的东西不外乎两个,Observables(被观察者)和Observable(观察者)。...什么是观察者模式?举个栗子,Android中View的点击监听器的实现,View是被观察者,OnClickListe

    detect-experimental-and-beta-code:这是一个IntelliJAndroid Studio IDE插件,用于检测带有@Experimental和@Beta批注的代码,并在使用时在装订线上显示自定义图标

    带有自定义Beta注释的另一个函数示例:我为什么要使用这个插件? 我们是开发人员,我们每天编写数百行代码,并使用大量的库。 这些库中有多少包含beta和实验类和函数? 答案是什么? 好吧,您可能从未想过这一点,...

    RxNimble, 灵活的扩展,使用RxSwift进行单元测试更容易.zip

    RxNimble是一款开源工具,它是RxSwift生态系统中的一个强大扩展,专为简化和增强RxSwift项目的单元测试体验而设计。RxSwift本身是基于ReactiveX编程范式的Swift实现,它提供了一种声明式的方式来处理事件流和数据...

    RxJava+Retrofit+okhttp上传图片给后台

    implementation 'io.reactivex.rxjava3:rxjava:3.1.3' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation '...

    ios-RAC实现登录页面.zip

    首先,我们来理解什么是ReactiveCocoa。RAC是Apple平台上的一个响应式编程库,它源自于 ReactiveX —— 一个跨平台的响应式编程库。RAC的核心思想是将应用程序中的事件和数据流视为可观察的对象,允许开发者以声明性...

    Reactive Extensions for javascript

    在文档的“为什么使用RxJS?”部分,会探讨选择使用RxJS的理由。可能的理由包括但不限于其支持创建复杂的数据流处理流程,易于管理和维护的异步代码,以及通过各种操作符来简化代码。RxJS让JavaScript开发者能够以...

    Node.js-EventBusOttoRxBus事件总线使用

    首先,让我们了解什么是事件总线。事件总线是一种松耦合的通讯方式,它允许应用程序的不同部分通过发布和订阅事件来互相通信,而无需了解彼此的具体实现。这种方式使得代码更加模块化,易于维护和扩展。 1. **...

Global site tag (gtag.js) - Google Analytics