반응형
🙋♂️ Flowable과 Observable의 비교
1. Flowable
- Reactiver Streams 인터페이스를 구현
- Subscriber에서 데이터를 처리
- 데이터 개수를 제어하는 배압 기능 존재
- Subscription으로 전달 받는 데이터 개수 제어
- Subscription으로 구독 해지
2. Observable
- Reactiver Streams 인터페이스를 구현 X
- Observer에서 데이터를 처리
- 데이터 개수를 제어하는 배압 기능 X
- 배압 기능이 없기 때문에 데이터 개수를 제어 X
- Disposable로 구독 해지
3. 배압이란?
- Flowable에서 데이터를 통지하는 속도가 Subscriber에서 통지된 데이터를 전달 받아 처리하는 속도 보다 빠를 때 밸런스를 맞추기 위해 통지량을 제어하는 기능을 말한다.
4. 배압 전략(Backpressure Strategy)
- MISSING 전략
- 배압을 적용하지 않는다.
- 나중에 onBackpressureXXX()로 배압 적용을 할 수 있다.
- ERROR 전략
- 통지된 데이터가 버퍼의 크기를 초과하면 MissingBackpressureException 에러를 통지한다.
- 즉, 소비자가 생산자의 통지 속도를 따라 잡지 못할 때 발생한다.
- BUFFER 전략
- DROP_LATEST
- 버퍼가 가득 찬 시점에 버퍼내에서 가장 최근에 버퍼로 들어온 데이터를 DROP 한다.
- DROP 된 빈 자리에 버퍼 밖에서 대기하던 데이터를 채운다.
- DROP_OLDEST
- 버퍼가 가득 찬 시점에 버퍼내에서 가장 오래전에 버퍼로 들어온 데이터를 DROP 한다.
- DROP 된 빈 자리에는 버퍼 밖에서 대기하던 데이터를 채운다.
- DROP 전략
- 버퍼에 데이터가 모두 채워진 상태가 되면 이후에 생성되는 데이터를 버리고, 버퍼가 비워지는 시점에 DROP 되지 않은 데이터부터 다시 버퍼에 담는다.
- DROP_LATEST
- LATEST 전략
- 버퍼에 데이터가 모두 채워진 상태가 되면 버퍼가 비워질 때까지 통지된 데이터는 버퍼 밖에서 대기하며 버퍼가 비워지는 시점에 가장 나중에 통지된 데이터부터 버퍼에 담는다.
반응형
'Pattern > Funtional' 카테고리의 다른 글
RxJava 연산자 (0) | 2021.07.28 |
---|---|
Reactive Streams (0) | 2021.07.26 |
Single, Maybe, Completable (0) | 2021.06.17 |
RxJava Publisher, Subscriber (0) | 2020.07.23 |