He estado mirando nuevo rx java 2 y no estoy muy seguro de entender la idea de backpressure
más ...
Soy consciente de que tenemos Observable
que no tiene backpressure
apoyo y Flowable
que lo tiene.
Entonces, basado en el ejemplo, digamos que tengo flowable
con interval
:
Flowable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
// do smth
}
});
Esto va a fallar después de alrededor de 128 valores, y eso es bastante obvio que estoy consumiendo más lento que obteniendo elementos.
Pero luego tenemos lo mismo con Observable
Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
// do smth
}
});
Esto no se bloqueará en absoluto, incluso cuando demore un poco el consumo, todavía funciona. Para que Flowable
funcione, digamos que puse onBackpressureDrop
operador, el bloqueo se ha ido, pero tampoco se emiten todos los valores.
Entonces, la pregunta base que no puedo encontrar respuesta actualmente en mi cabeza es ¿por qué debería preocuparme backpressure
cuando puedo usar simple Observable
todavía recibir todos los valores sin administrar el buffer
? O tal vez desde el otro lado, ¿qué ventajas me backpressure
da a favor de gestionar y manejar el consumo?