본문 바로가기

Pattern/Funtional

Flowable과 Observable

반응형

🙋‍♂️ 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 되지 않은 데이터부터 다시 버퍼에 담는다.
  • 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