Flowable | Observable |
---|---|
Reactive Streams 인터페이스를 구현 | Reactive Streams 인터페이스를 구현하지 않음 |
Subscriber에서 데이터를 처리한다. | Observer에서 데이터를 처리한다. |
데이터 개수를 제어하는 배압 기능이 있다. | 데이터 개수를 제어하는 배압 기능이 없다. |
Subscription으로 전달 받는 데이터 개수를 제어할 수 있다. | 배압 기능이 없기 때문에 데이터 개수를 제어할 수 없다. |
Subscription으로 구독을 해지한다. | Disposable로 구독을 해지한다. |
Flowable에서 데이터를 통지하는 속도가 Subscriber에서 통지된 데이터를 전달받아 처리하는 속도 보다 따를 때 밸런스를 맞추기 위해 데이터 통지량을 제어하는 기능이다.
<aside> 💡 왜 밸런스를 맞춰야 할까?
발행자는 데이터를 빠른 속도로 보내고 구독자는 데이터를 느리게 처리하면서 어느순간 처리하지 못한 많은 양의 데이터가 쌓이게된다. 이때 데이터가 쌓여진 곳에 OOM 같은 이유로 유실된다고 했을 때 문제가 발생할 수 있다. 이런 이유로 데이터 처리속도가 불균형일 때 RxJava에서는 예외를 발생시킬 수 있다.
</aside>
RxJava에서는 전략을 통해 Flowable이 통지 대기 중인 데이터를 어떻게 다룰지에 대한 배압 전략을 제공한다.
onBackpressureXXX()
로 배압 적용을 할 수 있다.