스케줄러 Scheduler
5890 단어 RxJava
Observable 조작자 체인에 다중 루틴 기능을 추가하려면, 특정한 스케줄러 (Scheduler) 에서 실행하도록 조작자 (또는 특정한 Observable) 를 지정할 수 있습니다.
일부 ReactiveX의 Observable 연산자는 Scheduler 매개 변수를 받아들일 수 있는 변형이 있습니다.이 매개 변수는 일부 또는 모든 작업을 특정한 스케줄러에 놓고 실행하도록 지정합니다.
Observe On과 Subscribe On 조작부호를 사용하면 Observable를 특정한 스케줄러에서 실행할 수 있습니다. Observe On은 특정한 스케줄러에서 관찰자의 onNext, onError, onCompleted 방법을 호출하도록 지시합니다. Subscribe On은 모든 처리 과정 (송신 데이터와 알림 포함) 을 특정한 스케줄러에 놓고 실행하는 것을 가리킵니다.
RxJava 예
스케줄러의 종류
다음 표에는 RxJava에서 사용할 수 있는 스케줄러 종류가 나와 있습니다.
스케줄러 유형
효과
Schedulers.computation( )
이벤트 순환이나 리셋 처리와 같은 계산 작업에 사용되며 IO 작업에 사용되지 않습니다. (IO 작업은 Schedulers.io () 를 사용하십시오.기본 스레드 수는 프로세서 수와 같습니다.
Schedulers.from(executor)
지정된 Executor를 스케줄러로 사용
Schedulers.immediate( )
현재 스레드에서 작업 즉시 시작
Schedulers.io( )
입출력 집약형 작업에 사용되며, 예를 들어 비동기적으로 입출력 작업을 막으면 이 스케줄러의 스레드 탱크는 수요에 따라 증가합니다.일반적인 계산 작업의 경우 Schedulers를 사용합니다.computation();Schedulers.io( )는 기본적으로CachedThreadScheduler로 루틴 캐시가 있는 새 루틴 스케줄러와 비슷하다
Schedulers.newThread( )
모든 작업에 새 스레드 만들기
Schedulers.trampoline( )
다른 줄 서기 작업이 완료되면 현재 라인에서 줄을 서서 실행을 시작합니다
기본 스케줄러
RxJava에서, 일부 Observable 조작부호의 변체는 동작 실행에 사용할 스케줄러를 설정할 수 있으며, 다른 것은 특정한 스케줄러에서 실행하지 않거나, 지정한 기본 스케줄러에서 실행할 수 있습니다.다음 표에는 일부 작업자의 기본 스케줄러가 나열되어 있습니다.
조작부호
스케줄러
buffer(timespan)
computation
buffer(timespan, count)
computation
buffer(timespan, timeshift)
computation
debounce(timeout, unit)
computation
delay(delay, unit)
computation
delaySubscription(delay, unit)
computation
interval
computation
repeat
trampoline
replay(time, unit)
computation
replay(buffersize, time, unit)
computation
replay(selector, time, unit)
computation
replay(selector, buffersize, time, unit)
computation
retry
trampoline
sample(period, unit)
computation
skip(time, unit)
computation
skipLast(time, unit)
computation
take(time, unit)
computation
takeLast(time, unit)
computation
takeLast(count, time, unit)
computation
takeLastBuffer(time, unit)
computation
takeLastBuffer(count, time, unit)
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
timer
computation
timestamp
immediate
window(timespan)
computation
window(timespan, count)
computation
window(timespan, timeshift)
computation
스케줄러 사용
이 스케줄러를 RxJava의 Observable 조작부호에 전달하는 것 외에도 자신의 작업을 스케줄링할 수 있습니다.다음 예제에서는 Scheduler를 보여 줍니다.Worker 사용법:
worker = Schedulers.newThread().createWorker();
worker.schedule(new Action0() {
@Override
public void call() {
yourWork();
}
});
// some time later...
worker.unsubscribe();
반복 스케줄러
돌아가는 방법을 조정하려면 schedule을 사용하고 schedule(this)를 사용하십시오. 예시:
worker = Schedulers.newThread().createWorker();
worker.schedule(new Action0() {
@Override
public void call() {
yourWork();
// recurse until unsubscribed (schedule will do nothing if unsubscribed)
worker.schedule(this);
}
});
// some time later...
worker.unsubscribe();
구독 해지 상태 확인 또는 설정
Worker 클래스의 객체는 Subscription 인터페이스를 구현하고 isUnsubscribed와 unsubscribe 방법을 사용하기 때문에 구독 취소 시 작업을 중지하거나 예약 중인 작업 내부에서 구독을 취소할 수 있습니다. 예:
Worker worker = Schedulers.newThread().createWorker();
Subscription mySubscription = worker.schedule(new Action0() {
@Override
public void call() {
while(!worker.isUnsubscribed()) {
status = yourWork();
if(QUIT == status) { worker.unsubscribe(); }
}
}
});
워커는 Subscription이기 때문에, 작업 종료와 자원 방출을 알리는 unsubscribe 방법을 호출할 수 있습니다.
지연 시간 및 주기 스케줄러
schedule (action, delayTime,timeUnit) 를 사용하여 지정한 스케줄러에서 작업을 지연시킬 수 있습니다. 다음 예에서 작업은 500밀리초 후에 시작됩니다.
someScheduler.schedule(someAction, 500, TimeUnit.MILLISECONDS);
다른 버전의 schedule, schedulePeriodically (action, initial Delay,period,time Unit) 방법을 사용하면 정기적으로 수행하는 작업을 배정할 수 있습니다. 다음 예의 작업은 500밀리초 후에 실행하고 250밀리초마다 실행합니다.
someScheduler.schedulePeriodically(someAction, 500, 250, TimeUnit.MILLISECONDS);
테스트 스케줄러
TestScheduler는 스케줄러의 시계 표현을 수동으로 미세하게 조정할 수 있습니다.이것은 정확한 시간에 배정된 임무에 의존하는 테스트에 매우 유용하다.이 스케줄러에는 세 가지 추가 방법이 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
RxJava의 Observable과 LiveData와 ObservableField를 좋은 느낌으로 사용합시다.구독 해제를 자동으로 해주기 때문에 편리 DataBinding (= ObservableField)로 사용할 수 없습니다 RxProperty<T> 는 기본적으로는 Observable<T> (라고 하는지 Subject<...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.