-
[RxJava] SchedulerReactiveX 2021. 5. 1. 10:49
스케줄러 개념
스케줄러는 Observable만큼이나 중요한 RxJava의 핵심요소이다.
- Observable 연산자 체인에 멀티스레딩을 적용하고 싶다면, 특정 스케줄러를 사용해서 연산자(또는 특정 Observable)를 실행하면 된다.
- SubscribeOn 연산자는 다른 스케줄러를 지정해서 Observable이 처리해야 할 연산자들을 실행시킨다.
- ObserveOn 연산자는 Observable이 옵저버에게 알림을 보낼때 사용할 스케줄러를 명시한다.
- 스케줄러를 별로도 지정하지 않으면 main 스레드에서 동작을 실행한다.
아래 그림이 보여주듯, SubscribeOn 연산자는 Observable이 연산을 위해 사용할 스레드를 지정하며, 연산자 체인 중 아무 곳에서 호출해도 문제되지 않는다. 하지만, ObserveOn 연산자는 연산자 체인 중 Observable이 사용할 스레드가 호출 체인 중 어느 시점에서 할당되는지에 따라 그 후에 호출되는 연산자는 영향을 받는다.
스케줄러 종류
RxJava에서는 계산 스케줄러, I/O 스케줄러, 트램펄린 스케줄러는 추천하며 뉴스레드 스케줄러는 특수한 상황에서 적용하길 권장한다.
1. Schedulers.newThread( )
- 요청을 받을때마다 새로운 스레드를 생성한다.
2. Schedulers.computation()
- 이벤트-루프와 콜백 처리 같은 연산 중심적인 작업을 위해 사용된다.
- CPU 개수만큼 스레드 생성
- RxComputationThreadPool라는 별도의 스레드 풀에서 돌아간다.
3. Schedulers.io()
- 네트워크 요청을 처리하거나 각종 입출력 작업을 실행하기 위한 스케줄러
- 필요할 때마다 스레드를 계속 생성
4. Schedulers.immediate()- 현재 스레드에서 즉시 작업을 수행한다.
5. Schedulers.trampoline()
- 큐에 있는 일이 끝나면 이어서 현재 스레드에서 수행하는 스케쥴러
References
- https://reactivex.io/
- 유동환, 박정준, 리액티브 프로그래밍 기초부터 안드로이드까지 한번에, 한빛미디어
'ReactiveX' 카테고리의 다른 글
Subject (0) 2021.05.15 RxAndroid (0) 2021.05.02 [RxJava] Single, Maybe (0) 2021.05.01 [RxJava] Operators(연산자) (0) 2021.04.30 [RxJava] Observable (0) 2021.04.29