ReactiveX简介

ReactiveX

ReactiveX,通过使用Observable序列,用于构建异步和基于事件的程序。它扩展了观察者模式,支持数据和事件序列,并提供操作用于构成声明序列,以对许多东西进行抽象,比如底层线程,同步,线程安全,并发数据结构,和非阻塞I/O。

ReactiveX的Observable模型把异步事件流看作简单可组合的操作,比如数组之类的数据项的集合。这样就能从繁琐的callback中解脱出来,使代码更具可读性并减少bug。


Observable是可组合的。
Java中的Future对于单级异步执行很直观,但嵌套使用它们是,复杂度就倍增了。
ReactiveX Observable就是用来方便构建异步数据流程的。
ReactiveX Observable不但可以像Java的Future那样返回值,还可以返回值序列甚至无限流。Observable是可以用于任何Use Case的一个抽象定义。
我们通常对Iterable类型的操作,都是主动的,可以看成是同步pull。对比来说,ReactiveX的Observable就是异步push了。
比较一下操作:

事件

Iterable(pull)

Observable(push)

取数据

T next()

onNext(T)

发现错误

Throws Exception

OnError(Exception)

结束

!hasNext()

onCompleted()


Reactive 编程

ReactiveX提供了一系列操作,可以用来filter,select,transform,combine和compose各种Observable。可以把Observable看成是支持‘push’的Iterable。通常,我们使用Iterable都是主动pull数据,如果没有数据,我们可能会把线程阻塞。而ReactiveX的Observable其实就是publish/consumer这样的异步模型。
例子:

Iterable Observable
getDataFromLocalMemory()
  .skip(10)
  .take(5)
  .map({ s -> return s + " transformed" })
  .forEach({ println "next => " + it })
getDataFromNetwork()
  .skip(10)
  .take(5)
  .map({ s -> return s + " transformed" })
  .subscribe({ println "onNext => " + it })

目前ReactiveX的有多种语言库,包括java,scala,Javascript,Ruby,Python,Groovy,Rust,Clojure,.Net, Go等。

还有一个Netty的adapter,挺有意思~

http://reactivex.io

https://github.com/ReactiveX



转载于:https://my.oschina.net/xdocker/blog/390117

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值