일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 러브자그레브
- xcode
- 세비야
- cocoapod
- swiftUI
- 지팍스페인
- Concurrency #Swift #Combine
- 리브어보드
- 스페인여행
- 시밀란
- 스쿠버다이빙
- 스페인광장
- Gradle
- 스플리트
- 푸켓여행
- 라이브러리
- 괌 자유여행
- 강릉
- 크로아티아
- Swift #Concurrency #쓰레드
- SwiftUI #Skeleton #데이터갱신
- 도심공항
- Cocoapods #PrivateRepo #SpecRepo
- 러브스플리트
- 연금저축펀드
- 그라나다
- 아시아나
- Device 등록
- 공기먹는다이버스
- 대한항공
- Today
- Total
JEP's Diary
스케줄러 본문
스케줄러
: 스케줄러는 스레드를 지정할 수 있게 해준다. 스케줄러를 활용한 비동기 프로그래밍의 핵심은 데이터 흐름이 발생하는 스레드와 처리된 결과를 구독자에게 전달하는 스레드를 분리 할 수 있다.
: subsribeOn()함수는 구독자가 Observable에 subscribe()함수를 호출하여 구독할 때 실행되는 스레드를 지정한다.
Observable에서 구독자가 subscribe()함수를 호출했을 때 데이터 흐름을 발행하는 스레드를 지정.
한번 호출했을때 결정한 스레드를 고정하며 이후에는 다시 호출해도 스레드가 바뀌지 않는다.
: observeOn()함수는 Observable에서 생성한 데이터 흐름이 여기저기 함수를 거치며 처리될 때 동작이 어느 스레드에서 일어나는지 지정할 수 있다.
처리된 결과를 구독자에게 전달하는 스레드를 지정한다.
여러 번 호출할 수 있으며 호출되면 그다음부터는 동작하는 스레드를 바꿀 수 있다.
: subscribeOn()함수만 호출하면 Observable의 모든 흐름이 동일한 스레드에서 실행한다.
: 스케줄러를 별도로 지정하지 않으면 현재(main)스레드에서 동작을 실행한다.
1.계산스케줄러
: CPU에 대응하는 계산용 스케줄러이다. '계산' 작업을 할 때는 대기 시간 없이 빠르게 결과를 도출하는 것이 중요하다. 내부적으로 스레드 풀을 생성하며 스레드 개수는 기본적으로 프로세서 개수와 동일하다.
2.IO스케줄러
: 네트워크상의 요청을 처리하거나 각종 입.출력 작업을 실행하기 위한 스케줄러이다. 계산 스케줄러는 CPU개수만큼 스레드를 생성하지만 IO스케줄러는 필요할때마다 스레드를 계속 생성한다. 입.출력 작업은 비동기로 실행되지만 결과를 얻기까지 대기시간이 길다.
3.트램펄린 스케줄러
: 새로운 스레드를 생성하지 않고 현재 스레드에 무한한 크기의 대기행렬큐를 생성하는 스케줄러이다.
*ConnectableObservable + share()
도시의 온도, 도시이름, 국가 이름을 추출하기 위해 Api콜을 여러번 하는 대신에 ConnectableObservable을 사용한다. ConnectableObservable클래스는 1개의 Observable을 여러 구독자가 공유하는 방식으로 차가운 Observable을 뜨거운 Observable로 변환해준다. subscribe()함수를 호출하면 Observable 데이터가 다시 발행된다.
참고 : RxJava프로그래밍 (리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에)
'Development > Reactive' 카테고리의 다른 글
리액티브 연산자2 (0) | 2018.07.28 |
---|---|
리액티브 연산자1 (0) | 2018.07.28 |
Observable 알고가기 (0) | 2018.07.25 |
리액티브 프로그래밍 개념 (0) | 2018.07.24 |