[RxJava] 다양한 스케줄러

Schedulers 클래스의 팩토리 메서드를 사용해서 스케쥴러를 생성한다. 아래의 테이블은 RxJava에서 제공하는 메서드와 사용 가능한 스케줄러들을 보여준다

scheduler

이 그림에서 알 수 있듯이 SubscribeOn 연산자는 연산자가 호출되는 연산자 체인의 어느 시점에서든지 Observable이 시작할 스레드를 지정한다. ObserveOn 은 Observable이 해당 연산자가 나타나는 위치 아래 에서 사용할 스레드에 영향을줍니다 . 이러한 이유 때문에 Observable 연산자 체인 중 다양한 지점에서 ObserveOn을 여러 번 호출 하여 특정 연산자가 작동하는 스레드를 변경할 수 있습니다.

스케줄러 용도
Schedulers.computation( ) 이벤트-루프와 콜백 처리 같은 연산 중심적인 작업을 위해 사용된다; 그렇기 때문에 I/O를 위한 용도로는 사용하지 말아야 한다(대신 Schedulers.io( )를 사용); 기본적으로 스레드의 수는 프로세서의 수와 같다
Schedulers.from(executor) 명시한 Executor를 스케줄러로 사용한다
Schedulers.immediate( ) 현재 스레드에서 즉시 실행할 작업을 스케줄링 한다
Schedulers.io( ) 블러킹 I/O의 비동기 연산 같은 I/O 바운드 작업을 처리한다. 이 스케줄러는 필요한 만큼 증가하는 스레드-풀을 통해 실행된다; 일반적인 연산이 필요한 작업은 Schedulers.computation( )를 사용하면 된다; 기본적으로 Schedulers.io( )이며 CachedThreadScheduler로,CachedThreadScheduler는 스레드 캐싱을 사용하는 새로운 스레드 스케줄러라고 생각하면 된다
Schedulers.newThread( ) 각각의 단위 작업을 위한 새로운 스레드를 생성한다
Schedulers.trampoline( ) 대기 중인 큐를 처리한 후에 현재 스레드에서 실행 될 작업 큐를 만든다

RxJava Observable 연산자를 위한 기본 스케줄러

(..) :모든 오버로딩을 포함한다는 의미.

연산자 기본 스케줄러
buffer(..) computation
delay(delay, unit) computation
delaySubscription(delay, unit) computation
interval computation
repeat trampoline
replay(..) computation
retry trampoline
sample(period, unit) computation
skip(time, unit) computation
skipLast(time, unit) computation
take(time, unit) computation
takeLast(..) computation
takeLastBuffer(..) computation
throttleFirst computation
throttleLast computation
throttleWithTimeout computation
timeInterval immediate
timeout(timeoutSelector) immediate
timeout(firstTimeoutSelector, timeoutSelector) immediate
timeout(timeoutSelector, other) immediate
timeout(timeout, timeUnit) computation
timeout(firstTimeoutSelector, timeoutSelector, other) immediate
timeout(timeout, timeUnit, other) computation
window(..) computation
timestamp immediate
timer computation