Which type to use?(어떤걸 사용 해야하지?)

2022. 5. 26. 12:28ReactiveX/RxJava

Base classes

RxJava 3 features several base classes you can discover operators on:

 

 

Rajava를 사용 함에 의해서 고려해야 하는 문제

배압 과 메모리 이슈

(MissingBackpressureException, OutOfMemoryError.)

Observable을 사용하는 경우

  • 가장 긴 요소의 흐름은 1000개 이하입니다. 즉, 시간이 지남에 따라 요소가 너무 적어 응용 프로그램에서 OOME가 발생할 가능성이 거의 없습니다.
  • 마우스 이동 또는 터치 이벤트와 같은 GUI 이벤트를 처리합니다. 이러한 이벤트는 합리적으로 역압박되는 경우가 거의 없으며 자주 발생하지 않습니다. Observable을 사용하여 1000Hz 이하의 요소 주파수를 처리할 수 있지만 어쨌든 샘플링/디바운싱 사용을 고려하십시오.
  • 흐름은 기본적으로 동기식이지만 플랫폼이 Java Streams를 지원하지 않거나 기능이 누락되었습니다. 를 사용하면 Observable일반적으로 오버헤드가 Flowable. (Java 6+를 지원하는 Iterable 흐름에 최적화된 IxJava도 고려할 수 있습니다.) .

Flowable을 사용하는 경우

  • 어딘가에서 어떤 방식으로 생성된 10,000개 이상의 요소를 처리하고 따라서 체인은 생성하는 양을 제한하도록 소스에 지시할 수 있습니다.
  • 디스크에서 파일 읽기(파싱)는 본질적으로 차단 및 풀 기반이며, 이는 사용자가 제어할 때 역압과 잘 작동합니다(예: 지정된 요청 양에 대해 이 파일에서 읽는 줄 수).
  • JDBC를 통해 데이터베이스에서 읽는 것도 차단 및 풀 기반이며 ResultSet.next()가능한 각 다운스트림 요청을 호출하여 사용자가 제어합니다.
  • 네트워크가 도움이 되거나 사용된 프로토콜이 일부 논리적 양 요청을 지원하는 네트워크(스트리밍) IO.
  • 나중에 비차단 반응 API/드라이버를 얻을 수 있는 많은 차단 및/또는 풀 기반 데이터 소스.

Single 사용하는 경우

  • 하나의 성공적인 값 또는 오류만 내보낼 수 있다는 점 을 제외하고 observable 와 유사하게 작동 합니다
  •  데이터가 발행과 동시에 onSuccess로 종료되므로 주로 한 번의 데이터만 발행하는 API 통신, Client 요청에 대응하는 서버의 응답에 많이 사용한다.
  • 오직 1개의 데이터를 전달하는 생산자다.
  • Http GET Request와 같이 결과가 1개의 데이터 or 실패인 경우 사용한다.

Completable

  • 0개의 데이터를 전달하는 생산자다.
  • db에 insert, update와 같이 데이터가 필요 없이 성공 or 실패인 경우 사용한다.

Maybe

  • 0개 또는 1개의 데이터를 전달하는 생산자다.
  • 예 / 아니오 선택과 같이 (둘 중 하나 + 예외 경우)에 쓸 수 있다.
  • 최대 1개의 원소가 방출될 수 있기 때문에, Maybe 유형은 배압에 대한 개념이 없다.

 

참고사이트

https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#when-to-use-observable

'ReactiveX > RxJava' 카테고리의 다른 글

Rxjava Observable  (0) 2022.05.26