使用Flux而不是for循环,有什么好处?

时间:2017-07-29 01:18:24

标签: kotlin reactive-programming project-reactor

我试图了解反应式编程,所以我想问一下在这里使用Flux是否有任何好处:

override fun notifyObserversOnMessage(message: Message) {
        Flux.fromStream(observers.stream())
                .map { observer -> Mono.just(observer.reactOnMessage(message)) }
                .subscribe()        
    }

而不是:

override fun notifyObserversOnMessage(message: Message) {
        for (observer in observers) {
            observer.reactOnMessage(message)
        }       
    }

它取决于每个观察者正在做的工作,是否是IO?

1 个答案:

答案 0 :(得分:1)

取决于。

如果顺序处理observers是合理的,那么在这里使用Flux没有任何好处

override fun notifyObserversOnMessage(message: Message) {
    observers.forEach { observer ->
        observer.reactOnMessage(message)
    }
}

或只是

override fun notifyObserversOnMessage(message: Message) {
    observers.forEach { it.reactOnMessage(message) }
}

很好。

对于天真的并行,

override fun notifyObserversOnMessage(message: Message) {
    observers.parallelStream().forEach { it.reactOnMessage(message) }
}
可以使用

,但此时您更有可能会有其他要求,例如工作池或超时。在这种情况下,反应堆的表现力很有用。