프로그램의 세부 일정을 주관하는 관리자로 생각하면 이해하기 조금 쉽습니다.
뉴 스레드 스케줄러
이름처럼 새로운 스레드를 생성합니다. 새로운 스레드를 만들어 어떤 동작을 실행하고 싶을 때 Schedulers.newThread()를 인자로 넣어주면 됩니다. 요청을 받을 때마다 새로운 스레드를 생성합니다.
활용도가 높은 계산 스케줄러와 IO 스케줄러와 같은 다른 스케줄러를 제공하기 때문에 추천하는 방법은 아닙니다.
계산 스케줄러
추천하는 스케줄러는 크게 세 가지입니다. 첫 번째는 계산 스케줄러, 두 번째는 IO 스케줄러 그리고 트램펄린 스케줄러 입니다. 앞서 배운 newThread 스케줄러나 다른 스케줄러는 특수한 상황에서 적용하길 권장합니다.
계산 스케줄러는 CPU에 대응하는 계산용 스케줄러입니다. ‘계산’ 작업을 할 때는 대기 시간 없이 빠르게 결과를 도출하는 것이 중요합니다. 계산 작업이라고 하니까 어렵게 느껴진다면 입출력(I/O) 작업을 하지 않는 스케줄러라고 생각하면 됩니다. 내부적으로 스레드 풀을 생성하며 스레드 개수는기본적으로 프로세서 개수와 동일합니다.
Schedulers.computation()을 인자로 넣어주면 됩니다.
IO 스케줄러
IO 스케줄러는 계산 스케줄러와는 다르게 네트워크상의 요청을 처리하거나 각종 입출력 작업을 실행하기 위한 스케줄러 입니다. 계산 스케줄러와 다른 점은 기본으로 생성되는 스레드 개수가 다르다는 것입니다.
즉, 계산 스케줄러는 CPU 개수만큼 스레드를 생성하지만 IO 스케줄러는 필요할 때마다 스레드를 계속 생성합니다. 입출력 작업은 비동기로 실행되지만 결과를 얻기까지 대기시간이 깁니다.
Schedulers.io()를 인자로 넣어주면 됩니다.
트램펄린 스케줄러
트램펄린 스케줄러는 새로운 스레드를 생성하지 않고 현재 스레드에 무한한 크기의 대기 행렬를 생성하는 스케줄러입니다.
새로운 스레드를 생성하지 않는다는 것과 대기 행렬을 자동으로 만들어 준다는 것이 뉴 스레드 스케줄러, 계산 스케줄러, IO 스케줄러와 다릅니다.
새로운 스레드를 생성하는 것이 아니라 현재 스레드에서 모든 작업을 진행합니다. 큐에 작업을 넣은 후 1개씩 꺼내어 동작하므로 첫 번째 구독과 두 번째 구독의 실행 순서가 바뀌는 경우는 발생하지 않습니다.
Schedulers.trampoline()을 인자로 넣어주면 됩니다.
싱글 스레드 스케줄
싱글 스레드 스케줄러는 Rxjava 내부에서 단일 스레드를 별도로 생성하여 구독 작업을 처리합니다. 단, 생성된 스레드는 여러 번 구독 요청이 와도 공통으로 사용합니다.
리액티브 프로그래밍이 비동기 프로그래밍을 지향하기 때문에 싱글 스레드 스케줄러를 활용할 확률은 낮습니다.
싱글 스레드 스케줄러에서 실행하면 비록 여러 개 Observable이 있어도 별도 마련해놓은 단일 스레드에서 차례로 실행합니다.
Schedulers.single()을 인자로 넣어주면 됩니다.
Executor 변환 스케줄러
자바에서는 java.util.current 패키지에서 제공하는 Executor를 변환하여 스케줄러를 생성 할 수 있습니다. 하지만 Executor 클래스와 스케줄러의 동작 방식과 다르므로 추천 방법은 아닙니다. 기존에 사용하던 Executor 클래스를 재사용할 때만 한정적으로 활용합니다.
[ 출처 : RxJava 프로그래밍 ]
'Domain > ReactiveX' 카테고리의 다른 글
[ReactiveX] SubscribeOn vs ObserveOn (0) | 2021.04.29 |
---|---|
[ReactiveX] ConnectableObservable (0) | 2021.04.29 |
[ReactiveX] Subject (0) | 2021.04.29 |
[ReactiveX] Cold Observable Vs Hot Observable (0) | 2021.04.29 |
[ReactiveX] Maybe (0) | 2021.04.29 |
댓글