RxJava, 2 pytanka

RxJava, 2 pytanka
Korges
  • Rejestracja:około 5 lat
  • Ostatnio:około 4 godziny
  • Postów:570
0

Hej, jw.
Z tego co wyczytałem, RxJava to:
'A library for composing asynchronous and event-based programs using observable sequences for the Java VM'

  1. Domyślnie RxJava opiera się na main threadzie, więc czy w takim wypadku jest wgl sens używać RxJavy bazując tylko po jednym threadzie? (pomijając bardziej rozbudowane stream api)
  2. Polecicie jakiś projekcik na gicie/tutorial/cokolwiek jakiś projekcik jak używać RxJave aby korzystać z niej asynchronicznie?
    Chciałbym tak tylko zerknąć na temat, 2-3 dni żeby zrozumieć idee i podstawy.
    Dzięki za odpowiedzi.
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 12 godzin
  • Postów:1875
2

RxJava sama z siebie nie zmienia wątku, możesz używać Observable/Flowable jako taki Stream na sterydach, ponieważ API jest o wiele bogatsze. Można elegancko tworzyć, mergować strumienie itd. Prawdziwa siła ujawnia się jednak, kiedy potrzebujesz zrownoleglć jakieś operacje, przerzucić wykonanie operacji na inna pule wątków - wtedy można to ładniej zapisać w kodzie za pomocą operatorów RxJavy. Nie mówiąc już o koncepcie backpressure.

Jeśli masz wybór, to polecam jednak Reactora - są bardzo podobne, jednak Reactor jest świeższy od RxJavy.


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
Zobacz pozostały 1 komentarz
Charles_Ray
Napisałem coś nie tak? :)
Michał Sikora
Michał Sikora
Zależy, co miałeś na myśli. Ja to zdanie zrozumiałem tak, że przykładowo dla source.compose(::nonBlockingOnSourcePool).map(::mapper) wątek na którym coś zostało wyemitowane i na którym coś zostało zmapowane będzie ten sam, co nie jest prawdą.
Charles_Ray
Miałem na myśli, że musisz explicite użyć publishOn lub subscribeOn, aby przełączyć przetwarzanie między schedulerami (pulami wątków).
Michał Sikora
Michał Sikora
No to pełna zgoda. Po prostu użycie słowa wątek mnie zmyliło. Chociaż to explicit to też tak nie do końca, bo delay np. samo przełączy pulę, jak się nie poda własnej.
Charles_Ray
Masz rację. Podobnie jak timeout czy debounce, podstępnie jest użyty globalny Schedulers.computation(), przynajmniej w RxJavie. Myślę, że bezpieczniej rzeczywiście byłoby napisać, że RxJava nie robi żadnych założeń odnośnie wątku, na którym odpali się dany operator przy czym z przyczyn wydajnościowych stara się ograniczać zmiany kontekstu do minimum.
Korges
  • Rejestracja:około 5 lat
  • Ostatnio:około 4 godziny
  • Postów:570
0

Wracając do tematu, macie podlinkować jakiś prosty projekt z użyciem RxJavy wielowątkowo? Chciałbym zobaczyć ją w akcji.

Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 12 godzin
  • Postów:1875
1

”Engineering is easy. People are hard.” Bill Coughran

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.