反应流如何与非阻塞I / O不同?

时间:2016-08-06 00:54:52

标签: java rx-java reactive-programming

反应流如何与非阻塞I / O不同?什么是Java 8 future API无法做到的反应流可以做什么?

3 个答案:

答案 0 :(得分:0)

与非阻塞I / O相同,Reactive Extensions(ReactiveX)提供非阻塞编程风格。

不仅如此,ReactiveX将所有内容都视为流,为流提供了许多操作。这个功能使异步编程非常容易,使我们免于回调地狱;)

我建议你阅读这份文件 http://reactivex.io/intro.html

这里是ReactiveX的好幻灯片。

  1. https://speakerdeck.com/benjchristensen/applying-reactive-programming-with-rxjava-at-goto-chicago-2015

  2. http://sssslide.com/speakerdeck.com/android10/the-mayans-lost-guide-to-rxjava-on-android

答案 1 :(得分:0)

主要原因是ReactiveX提供了一些运营商来异步运行您的管道,如 SubscribeOn ObserverOn 。并且还提供了Java8或Scala在其功能编程中默认提供的一些其他功能。

在这里,您可以看到有关异步运算符的示例,以了解其工作原理https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/scheduler/ObservableAsynchronous.java

此处RxJava的全局示例https://github.com/politrons/reactive

答案 2 :(得分:-1)

非阻塞I / O是比反应流更低级别的抽象,它为您提供这样的结构(将serviceX视为改造客户端):

Observable.zip(
  service1.getFoo(1),
  service2.doBar(xyz),
  service3.makeBaz("meh"),
  (a,b,c) -> service4.somethingElse(a+b+c)
)
.onErrorReturn("error");

这在7个联系人3个并行的服务中,当所有人都返回联系人时,他们的结果是第4个。