RxJava 학습회 Week3

7660 단어 RxJava2RxJava

Schedulers


Schedulers

  • newThread()
  • computation()
  • io()
  • single()
  • trampoline()
  • from()
  • 안녕히 계십시오.

  • SubscribeOn() 및 ObserveOn()
  • SubscribeOn()

  • Observable 동작을 지정하는 Scheduller
  • Operator Chain 어디서나 지정할 수 있음
  • ObserveOn()

  • Observer 동작을 지정하는 Scheduller
  • Operator Chain이 지정한 Operator

  • 화상도



    기본 작업

  • SubscribeOn() 또는 ObserveOn()을 지정하지 않으면 현재 단서에서 실행
  • 샘플 0: 코드


    아무것도 정하지 않고 subscribe를 실행합니다.

    샘플 0: 실행 결과

    subscribe: main
    map1-1: main
    map2-1: main
    map3-1: main
    onNext-1: main
    map1-2: main
    map2-2: main
    map3-2: main
    onNext-2: main
    map1-3: main
    map2-3: main
    map3-3: main
    onNext-3: main
    

    샘플 1: 코드


    백엔드 단서에서 샘플 실행 0

    샘플 1: 실행 결과

    subscribe: pool-1-thread-1
    map1-1: pool-1-thread-1
    map2-1: pool-1-thread-1
    map3-1: pool-1-thread-1
    onNext-1: pool-1-thread-1
    map1-2: pool-1-thread-1
    map2-2: pool-1-thread-1
    map3-2: pool-1-thread-1
    onNext-2: pool-1-thread-1
    map1-3: pool-1-thread-1
    map2-3: pool-1-thread-1
    map3-3: pool-1-thread-1
    onNext-3: pool-1-thread-1
    

    newThread()


    API 문서


    각 처리 단위로 새 단서를 생성합니다.

    샘플 2: 코드


    SubscribeOn() 및 Observen()에서 newThread() 지정

    샘플 2: 실행 결과

    subscribe: RxNewThreadScheduler-1
    map1-1: RxNewThreadScheduler-2
    map1-2: RxNewThreadScheduler-2
    map1-3: RxNewThreadScheduler-2
    map2-1: RxNewThreadScheduler-3
    map2-2: RxNewThreadScheduler-3
    map2-3: RxNewThreadScheduler-3
    map3-1: RxNewThreadScheduler-4
    map3-2: RxNewThreadScheduler-4
    map3-3: RxNewThreadScheduler-4
    onNext: RxNewThreadScheduler-5
    onNext: RxNewThreadScheduler-5
    onNext: RxNewThreadScheduler-5
    

    샘플 3: 코드


    중간 Observen () 을 뽑아 보십시오.

    샘플 3: 실행 결과

    subscribe: RxNewThreadScheduler-1
    map1-1: RxNewThreadScheduler-2
    map2-1: RxNewThreadScheduler-2
    map1-2: RxNewThreadScheduler-2
    map2-2: RxNewThreadScheduler-2
    map1-3: RxNewThreadScheduler-2
    map3-1: RxNewThreadScheduler-3
    map2-3: RxNewThreadScheduler-2
    map3-2: RxNewThreadScheduler-3
    map3-3: RxNewThreadScheduler-3
    onNext: RxNewThreadScheduler-4
    onNext: RxNewThreadScheduler-4
    onNext: RxNewThreadScheduler-4
    

    computation()


    API 문서


    계산 처리에 사용된 Schduller를 반환합니다.이본트로, 호출 처리, 계산 처리에 사용할 수 있습니다.
    입출력 제한 처리에는 사용하지 마십시오.그런 상황에서 IO를 쓰세요.

    이루어지다

  • 스레드 풀 내의 스레드를 재활용하는 Scheduller
  • 스레드 수
  • System.getProperty("rx2.computation-threads") or Runtime.getRuntime().availableProcessors()
  • 샘플 4: 코드


    스레드 수를 2로 지정하고computation을 사용합니다

    샘플 4: 실행 결과

    subscribe: RxComputationThreadPool-1
    map1-1: RxComputationThreadPool-2
    map1-2: RxComputationThreadPool-2
    map1-3: RxComputationThreadPool-2
    map2-1: RxComputationThreadPool-1
    map2-2: RxComputationThreadPool-1
    map2-3: RxComputationThreadPool-1
    map3-1: RxComputationThreadPool-2
    map3-2: RxComputationThreadPool-2
    onNext: RxComputationThreadPool-1
    onNext: RxComputationThreadPool-1
    map3-3: RxComputationThreadPool-2
    onNext: RxComputationThreadPool-1
    

    io()


    API 문서


    IO는 속박 처리에 사용되는 Scheduller입니다.필요할 때 스레드 수가 증가하는 스레드 탱크에서 실현된다.입출력 블록의 비동기 처리에 사용할 수 있습니다.
    계산 처리에 사용하지 마세요.대신 computation()을 사용하십시오.

    이루어지다

  • 필요에 따라 새로운 스레드를 만드는 Scheduller
  • 그러나 스레드는 처리가 끝난 후 60초 동안 캐시 스레드로 유지됩니다.
  • 다음에 60초 이내로 처리할 경우 캐시 스레드 재사용
  • 샘플 5: 코드


    io()를 사용하여 Observable을 두 번 실행합니다.

    샘플 5: 실행 결과

    subscribe: RxCachedThreadScheduler-1
    map1-1: RxCachedThreadScheduler-2
    map1-2: RxCachedThreadScheduler-2
    map1-3: RxCachedThreadScheduler-2
    map2-1: RxCachedThreadScheduler-3
    map2-2: RxCachedThreadScheduler-3
    map2-3: RxCachedThreadScheduler-3
    map3-1: RxCachedThreadScheduler-4
    map3-2: RxCachedThreadScheduler-4
    map3-3: RxCachedThreadScheduler-4
    onNext: RxCachedThreadScheduler-5
    onNext: RxCachedThreadScheduler-5
    onNext: RxCachedThreadScheduler-5
    
    subscribe: RxCachedThreadScheduler-5
    map1-1: RxCachedThreadScheduler-4
    map1-2: RxCachedThreadScheduler-4
    map2-1: RxCachedThreadScheduler-3
    map1-3: RxCachedThreadScheduler-4
    map2-2: RxCachedThreadScheduler-3
    map3-1: RxCachedThreadScheduler-2
    map2-3: RxCachedThreadScheduler-3
    map3-2: RxCachedThreadScheduler-2
    map3-3: RxCachedThreadScheduler-2
    onNext: RxCachedThreadScheduler-1
    onNext: RxCachedThreadScheduler-1
    onNext: RxCachedThreadScheduler-1
    
    =>재활용

    computation() vs io()


    computation() vs io()


    각자 파산한 사례를 소개하다
  • 샘플6:computation()파산사례
  • 샘플 7:io() 파산 사례
  • 샘플 6: 코드


    IO는computation()을 이용하여 네트워크 통신을 속박한다

    샘플 6: 실행 결과

    (実際に実行)
    

    샘플 6 Fixed:코드


    샘플 6의 IO() 사용

    샘플 6 Fixed:결과 실행

    (実際に実行)
    

    샘플 7: 코드


    CPU는 구속된 컴퓨팅 처리에서 io()를 사용합니다.

    샘플 7: 실행 결과

    (実際に実行)
    

    샘플 7 Fixed:코드


    샘플 7에서computation() 사용

    샘플 7 Fixed:결과 실행

    (実際に実行)
    

    single()


    API 문서


    Scheduller 인스턴스가 관리하는 공유 백그라운드 스레드를 제공합니다.

    샘플 8: 코드


    single()의 Observable을 사용합니다.

    샘플 8: 실행 결과

    subscribe: RxSingleScheduler-1
    map1-1: RxSingleScheduler-1
    map1-2: RxSingleScheduler-1
    map1-3: RxSingleScheduler-1
    map2-1: RxSingleScheduler-1
    map2-2: RxSingleScheduler-1
    map2-3: RxSingleScheduler-1
    map3-1: RxSingleScheduler-1
    map3-2: RxSingleScheduler-1
    map3-3: RxSingleScheduler-1
    onNext: RxSingleScheduler-1
    onNext: RxSingleScheduler-1
    onNext: RxSingleScheduler-1
    
    => 정상 시간과는 다른 순서로 작동합니다.

    trampoline()


    API 문서


    현재 처리가 끝난 후에 실행되는 단서에서 실행되는 단서를 제공합니다.

    잘 모르겠어요.orz

  • 현재 단서에서만 실행합니까?
  • 코드에queue가 존재하지만 사용하지 않은 것 같습니다.
  • 참고 자료


  • https://medium.com/@I_Love_Coding/rxjava-schedulers-trampoline-use-cases-283f6649cbf#.q1xlqvoh5
  • 한 라인에서 실행하려면single()로 대체
  • 이런 사용법이라면 거꾸로 사용할 수 없다.

  • http://qiita.com/amay077/items/89093d33cd4f32154a5f
  • RxJava1 정보요?RxJava 2에는 Scheduulers가 있습니다.immediate()가 없습니다.
  • 샘플 9: 코드


    사용 예

    샘플 9: 실행 결과

    subscribe: main
    map1-1: main
    map2-1: main
    map3-1: main
    onNext: main
    map1-2: main
    map2-2: main
    map3-2: main
    onNext: main
    map1-3: main
    map2-3: main
    map3-3: main
    onNext: main
    

    from()


    API 문서


    java.util.concurrent.Executor를 Schedule로 변환

    샘플 10: 코드


    Executors.newFixedThereadPool 사용()

    샘플 10: 실행 결과

    subscribe: pool-1-thread-1
    map1-1: pool-1-thread-2
    map1-2: pool-1-thread-2
    map1-3: pool-1-thread-2
    map2-1: pool-1-thread-3
    map2-2: pool-1-thread-3
    map2-3: pool-1-thread-3
    map3-1: pool-1-thread-4
    map3-2: pool-1-thread-4
    map3-3: pool-1-thread-4
    onNext: pool-1-thread-1
    onNext: pool-1-thread-1
    onNext: pool-1-thread-1
    

    끝맺다


    학습회 필기

  • subscribeOn()을 두 번 쓰면 어떻게 될까(샘플11)
  • ↑ 방금 쓴 subscribeOn 적용()
  • subscribe는 몇 번 불러도 돼요?(샘플12)
  • ↑여러번호출가능
  • 좋은 웹페이지 즐겨찾기