본문 바로가기
Rx

스케줄러 -4( 트램펄린 스케줄러 )

by 봄석 2018. 12. 27.

본 내용은 필자가 학습한 내용을 정리하는 내용입니다.

대부분 의 내용이 아래 책의 내용이므로 원서를 구매해서 직접보시는걸 추천드립니다!

RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에

유동환 , 박정준 지음 | 한빛미디어 | 2017년 09월 04일 출간

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788968488658&orderClick=LAV&Kc=


저자님의 블로그

https://brunch.co.kr/@yudong#info




RxJava의 버전별 스케줄러 종류

스케줄러 

RxJava 2.x 

RxJava 1.x 

  뉴 스레드 스케줄러

newThread()

 newThread()

 싱글 스레드 스케줄러

single() 

지원 안 함 

계산 스케줄러 

computation() 

computation() 

IO 스케줄러 

io() 

io() 

트램펄린 스케줄러 

trampoline() 

trampoline() 

메인 스레드 스케줄러 

지원 안 함 

im 

 테스트 스케줄러

지원 안 함 

test() 


스케줄러 동작 방법

1. 스케줄러는 RxJava 코드를 어느 스레드에서 실행할지 지정할 수 있다.

2. subscribeOn() 함수와 observeOn() 함수를 모두 지정하면 Observable에서 데이터 흐름이 

발생하는 스레드와 처리된 결과를 구독자에게 발행하는 스레드를 분리할 수 있다.

3. subscribeOn() 함수만 호출하면 Observable의 모든 흐름이 동일한 스레드에서 실행된다.

4. 스케줄러를 별도로 지정하지 않으면 현재(main)스레드에서 동작을 실행한다



트램펄린 스케줄러

트램펄린 스케줄러는 새로운 스레드를 생성하지 않고 현재 스레드에 무한한 크기의 대기행렬(Queue)를 생성하는 스케줄러 입니다. RxJava 1.x 에서는 repeat() 함수와 retry() 함수의 기본 스케줄러였으나 RxJava 2.x 에서는 이러한 제약이 사라졌습니다. 


새로운 스레드를 생성하지 않는다는 것과 대기행렬을 자동으로 만들어 준다는것이 뉴 스레드 스케줄러, 계산 스케줄러, IO 스케줄러와의 다른점입니다.


트램펄린 스케줄러 활용 예

String[] orgs={"1","3","5"};
Observable<String> source= Observable.fromArray(orgs);
        
//구독 #1
source.subscribeOn(Schedulers.trampoline())
.map(data->"<<"+data+">>")
     .subscribe(Log::i);
        
//구독 #2
source.subscribeOn(Schedulers.trampoline())
     .map(data->"##"+data+"##")
     .subscribe(Log::i);
        
CommonUtils.sleep(500);




배열 데이터를 트램펄린 스케줄러를 활용해 Observable에서 발행합니다. subscribeOn()

함수의 호출 위치가 IO 스케줄러의 예제보다 앞에 있지만 호출위치는 딱히 상관없습니다.

처음에 지정한 스레드로 구독자에게 데이터를 발행합니다.


실행결과

main | value = <<1>>
main | value = <<3>>
main | value = <<5>>
main | value = ##1##
main | value = ##3##

main | value = ##5##


새로운  스레드를 생성하지 않고 main 스레드에서 모든 작업을 실행합니다. 큐에 작업을 넣은 후 1개씩 꺼내어 동작하므로 첫 번째 구독과 두 번째 구독의 실행 순서가 바뀌는 경우는 발생하지 않습니다. 


<요약>

트램펄린 스케줄러는 현재스레드에 대기행렬(큐)를 만들어 작업을 처리한다.





댓글