비교

Flowable Observable
Reactive Streams 인터페이스를 구현 Reactive Streams 인터페이스를 구현하지 않음
Subscriber에서 데이터를 처리한다. Observer에서 데이터를 처리한다.
데이터 개수를 제어하는 배압 기능이 있다. 데이터 개수를 제어하는 배압 기능이 없다.
Subscription으로 전달 받는 데이터 개수를 제어할 수 있다. 배압 기능이 없기 때문에 데이터 개수를 제어할 수 없다.
Subscription으로 구독을 해지한다. Disposable로 구독을 해지한다.

배압(Back Pressure)이란?

Flowable에서 데이터를 통지하는 속도가 Subscriber에서 통지된 데이터를 전달받아 처리하는 속도 보다 따를 때 밸런스를 맞추기 위해 데이터 통지량을 제어하는 기능이다.

<aside> 💡 왜 밸런스를 맞춰야 할까?

발행자는 데이터를 빠른 속도로 보내고 구독자는 데이터를 느리게 처리하면서 어느순간 처리하지 못한 많은 양의 데이터가 쌓이게된다. 이때 데이터가 쌓여진 곳에 OOM 같은 이유로 유실된다고 했을 때 문제가 발생할 수 있다. 이런 이유로 데이터 처리속도가 불균형일 때 RxJava에서는 예외를 발생시킬 수 있다.

</aside>

배압 전략(BackpressureStrategy)

RxJava에서는 전략을 통해 Flowable이 통지 대기 중인 데이터를 어떻게 다룰지에 대한 배압 전략을 제공한다.

M ISSING 전략

ERROR 전략

BUFFER 전략