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 |
---|---|
|
|
目前ReactiveX的有多种语言库,包括java,scala,Javascript,Ruby,Python,Groovy,Rust,Clojure,.Net, Go等。
还有一个Netty的adapter,挺有意思~