-
SubscribeOn 와 ObserveOn 그리고 SchedulersAndroid/Rx 2019. 10. 7. 00:03반응형
SubscribeOn
SubscribeOn은 구독(subscribe)에서 사용할 스레드를 지정
도중 ObserveOn이 호출되어도 SubscribeOn의 스레드 지정에는 영향을 끼치지 않는다.
ObserveOn
ObserveOn은 Observable이 다음처리를 진행할때 사용할 스레드를 지정
ObserveOn이 선언된 후 처리가 진행뒤 다른 ObserveOn이 선언시 다른 ObserveOn에서 선언한 스레드로 변경되어 이후 처리를 진행한다.
Schedulers
Observable 연산자 체인에 멀티스레딩을 적용하고 싶다면, 특정 스케줄러를 사용해서 연산자(또는 특정 Observable)를 실행하면 된다.
ReactiveX의 일부 Observable 연산자는 사용할 스케줄러를 파라미터로 전달 받기도 하는데, 이 연산자들은 자신이 처리할 연산의 일부 또는 전체를 전달된 스케줄러 내에서 실행한다.
기본적으로, Observable과 연산자 체인은 이처럼 스케줄러를 통해 동작하고 Subscribe 메서드가 호출되는 스레드를 사용해서 옵저버에게 알림을 보낸다. SubscribeOn 연산자는 다른 스케줄러를 지정해서 Observable이 처리해야 할 연산자들을 실행 시킨다. 그리고, ObserveOn 연산자는 Observable이 옵저버에게 알림을 보낼때 사용 할 스케줄러를 명시한다.아래 그림이 보여주듯, SubscribeOn 연산자는 Observable이 연산을 위해 사용할 스레드를 지정하며, 연산자 체인 중 아무 곳에서 호출해도 문제되지 않는다. 하지만, ObserveOn 연산자는 연산자 체인 중 Observable이 사용할 스레드가 호출 체인 중 어느 시점에서 할당되는지에 따라 그 후에 호출되는 연산자는 영향을 받는다. 그렇기 때문에, 어쩌면 여러분은 특정 연산자를 별도의 스레드에서 실행 시키기 위해 연산자 체인 중 한 군데 이상에서ObserveOn을 호출하게 될 것이다.
Schedulers.computation() - 이벤트 룹에서 간단한 연산이나 콜백 처리를 위해서 쓰는 것입니다. I/O 처리를 여기에서 해서는 안됩니다.
Schedulers.from(executor) - 특정 executor를 스케쥴러로 사용합니다.
Schedulers.immediate() - 현재 스레드에서 즉시 수행합니다.
Schedulers.io() - 동기 I/O를 별도로 처리시켜 비동기 효율을 얻기 위한 스케줄러입니다. 자체적인 스레드 풀에 의존합니다.
Schedulers.newThread() - 항상 새로운 스레드를 만드는 스케쥴러입니다.
Schedulers.trampoline() - 큐에 있는 일이 끝나면 이어서 현재 스레드에서 수행하는 스케쥴러.AndroidSchedulers.mainThread() - 안드로이드의 UI 스레드에서 동작합니다.
HandlerScheduler.from(handler) - 특정 핸들러 handler에 의존하여 동작합니다.[참고링크]
http://reactivex.io/documentation/operators/subscribeon.html
http://reactivex.io/documentation/operators/observeon.html
http://reactivex.io/documentation/scheduler.html
https://bsscco.github.io/2019/04/07/rx-subscribe-on-and-observe-on/
https://yunhookim.tistory.com/10
https://medium.com/upday-devs/rxjava-subscribeon-vs-observeon-9af518ded53a
http://minsone.github.io/programming/reactive-swift-observeon-subscribeon
http://blog.weirdx.io/post/26576
https://altongmon.tistory.com/763
반응형'Android > Rx' 카테고리의 다른 글
RxJava2로 EventBus 구현 하기 (Rxbus) (0) 2020.03.20 ReactiveX - Subject (0) 2019.09.04